diff --git a/Rust/Cargo.lock b/Rust/Cargo.lock deleted file mode 100644 index 17bc386..0000000 --- a/Rust/Cargo.lock +++ /dev/null @@ -1,5668 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" -dependencies = [ - "gimli 0.27.3", -] - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli 0.28.0", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher", -] - -[[package]] -name = "aes-gcm" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher", - "opaque-debug 0.3.0", -] - -[[package]] -name = "ahash" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" -dependencies = [ - "cfg-if", - "getrandom 0.2.10", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" -dependencies = [ - "memchr", -] - -[[package]] -name = "amcl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee5cca1ddc8b9dceb55b7f1272a9d1e643d73006f350a20ab4926d24e33f0f0d" - -[[package]] -name = "amcl_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c7c7627444413f6a488bf9e6d352aea6fcfa281123cd92ecac0b3c9ef5ef2" -dependencies = [ - "byteorder", - "lazy_static", - "miracl_core", - "rand 0.7.3", - "rayon", - "serde", - "serde_bytes", - "serde_json", - "sha3 0.8.2", - "subtle-encoding", - "zeroize", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" - -[[package]] -name = "arbitrary" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" - -[[package]] -name = "arc-swap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" - -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "async-trait" -version = "0.1.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "attohttpc" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e69e13a99a7e6e070bb114f7ff381e58c7ccc188630121fc4c2fe4bcf24cd072" -dependencies = [ - "flate2", - "http", - "log", - "native-tls", - "openssl", - "url", - "wildmatch", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line 0.21.0", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object 0.32.1", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding 0.1.5", - "byte-tools", - "byteorder", - "generic-array 0.12.4", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "block-padding 0.2.1", - "generic-array 0.14.7", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding 0.2.1", - "cipher", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", -] - -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "bstr" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" -dependencies = [ - "memchr", - "regex-automata", - "serde", -] - -[[package]] -name = "btoi" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" -dependencies = [ - "num-traits", -] - -[[package]] -name = "bumpalo" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" - -[[package]] -name = "byte-slice-cast" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "c2-chacha" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "217192c943108d8b13bac38a1d51df9ce8a407a3f5a71ab633980665e68fbd9a" -dependencies = [ - "ppv-lite86", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chacha20" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed8738f14471a99f0e316c327e68fc82a3611cc2895fcb604b89eedaf8f39d95" -dependencies = [ - "cipher", - "zeroize", -] - -[[package]] -name = "chacha20poly1305" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1fc18e6d90c40164bf6c317476f2a98f04661e310e79830366b7e914c58a8e" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-targets", -] - -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "clru" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8191fa7302e03607ff0e237d4246cc043ff5b3cb9409d995172ba3bea16b807" - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "color-eyre" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" -dependencies = [ - "backtrace", - "color-spantrace", - "eyre", - "indenter", - "once_cell", - "owo-colors", - "tracing-error", -] - -[[package]] -name = "color-spantrace" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce" -dependencies = [ - "once_cell", - "owo-colors", - "tracing-core", - "tracing-error", -] - -[[package]] -name = "const-oid" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "cpp_demangle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" -dependencies = [ - "libc", -] - -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - -[[package]] -name = "cranelift-bforest" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1380172556902242d32f78ed08c98aac4f5952aef22d3684aed5c66a5db0a6fc" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037cca234e1ad0766fdfe43b527ec14e100414b4ccf4bb614977aa9754958f57" -dependencies = [ - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-control", - "cranelift-entity", - "cranelift-isle", - "gimli 0.27.3", - "hashbrown 0.13.2", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d375e6afa8b9a304999ea8cf58424414b8e55e004571265a4f0826eba8b74f18" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca590e72ccb8da963def6e36460cce4412032b1f03c31d1a601838d305abdc39" - -[[package]] -name = "cranelift-control" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d2d38eea4373639f4b6236a40f69820fed16c5511093cd3783bf8491a93d9cf" -dependencies = [ - "arbitrary", -] - -[[package]] -name = "cranelift-entity" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e3173c1434af23c00e4964722cf93ca8f0e6287289bf5d52110597c3ba2ea09" -dependencies = [ - "serde", -] - -[[package]] -name = "cranelift-frontend" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aec4a3a33825062eccf6eec73e852c8773220f6e4798925e19696562948beb1f" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5146b5cea4b21095a021d964b0174cf6ff5530f83e8d0a822683c7559e360b66" - -[[package]] -name = "cranelift-native" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cec3717ce554d3936b2101aa8eae1a2a410bd6da0f4df698a4b008fe9cf1e9" -dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon", -] - -[[package]] -name = "cranelift-wasm" -version = "0.98.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fd2f9f1bf29ce6639ae2f477a2fe20bad0bd09289df13efeb890e8e4b9f807" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools", - "log", - "smallvec", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" -dependencies = [ - "cfg-if", - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" -dependencies = [ - "autocfg 1.1.0", - "cfg-if", - "crossbeam-utils", - "memoffset 0.9.0", - "scopeguard", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-bigint" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83bd3bb4314701c568e340cd8cf78c975aa0ca79e03d3f6d1677d5b0c9c0c03" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.7", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] - -[[package]] -name = "ctr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" -dependencies = [ - "cipher", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "cxx" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe98ba1789d56fb3db3bee5e032774d4f421b685de7ba703643584ba24effbe" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4ce20f6b8433da4841b1dadfb9468709868022d829d5ca1f2ffbda928455ea3" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.33", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20888d9e1d2298e2ff473cee30efe7d5036e437857ab68bbfea84c74dba91da2" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.33", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.0", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "debugid" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" -dependencies = [ - "uuid", -] - -[[package]] -name = "der" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b71cca7d95d7681a4b3b9cdf63c8dbc3730d0584c2c74e31416d64a90493f4" -dependencies = [ - "const-oid", -] - -[[package]] -name = "deranged" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "crypto-common", -] - -[[package]] -name = "directories-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "displaydoc" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "ecdsa" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ee23aa5b4f68c7a092b5c3beb25f50c406adc75e2363634f242f28ab255372" -dependencies = [ - "der", - "elliptic-curve", - "hmac", - "signature", -] - -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elliptic-curve" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beca177dcb8eb540133e7680baff45e7cc4d93bf22002676cec549f82343721b" -dependencies = [ - "crypto-bigint", - "ff", - "generic-array 0.14.7", - "group", - "pkcs8", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "eyre" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "failure" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" -dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "faster-hex" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239f7bfb930f820ab16a9cd95afc26f88264cf6905c960b340a615384aa3338a" -dependencies = [ - "serde", -] - -[[package]] -name = "fastrand" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" - -[[package]] -name = "ff" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f40b2dcd8bc322217a5f6559ae5f9e9d1de202a2ecee2e9eafcbece7562a4f" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "file-per-thread-logger" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3cc21c33af89af0930c8cae4ade5e6fdc17b5d2c97b3d2e2edb67a1cf683f3" -dependencies = [ - "env_logger", - "log", -] - -[[package]] -name = "filetime" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.3.5", - "windows-sys", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fixnum" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a312dd8b1a9875c6a2ddf253caa740804857615a478aa576d6982a41782516f" -dependencies = [ - "derive_more", - "itoa", - "parity-scale-codec", - "serde", - "static_assertions", - "typenum", -] - -[[package]] -name = "flate2" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "fxprof-processed-profile" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" -dependencies = [ - "bitflags 2.4.0", - "debugid", - "fxhash", - "serde", - "serde_json", -] - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "gethostname" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getset" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ghash" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" -dependencies = [ - "opaque-debug 0.3.0", - "polyval", -] - -[[package]] -name = "gimli" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" -dependencies = [ - "fallible-iterator", - "indexmap 1.9.3", - "stable_deref_trait", -] - -[[package]] -name = "gimli" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" - -[[package]] -name = "gix" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a8c9f9452078f474fecd2880de84819b8c77224ab62273275b646bf785f906" -dependencies = [ - "gix-actor", - "gix-commitgraph", - "gix-config", - "gix-date", - "gix-diff", - "gix-discover", - "gix-features", - "gix-fs", - "gix-glob", - "gix-hash", - "gix-hashtable", - "gix-index", - "gix-lock", - "gix-macros", - "gix-object", - "gix-odb", - "gix-pack", - "gix-path", - "gix-ref", - "gix-refspec", - "gix-revision", - "gix-revwalk", - "gix-sec", - "gix-tempfile", - "gix-trace", - "gix-traverse", - "gix-url", - "gix-utils", - "gix-validate", - "once_cell", - "parking_lot", - "signal-hook", - "smallvec", - "thiserror", - "unicode-normalization", -] - -[[package]] -name = "gix-actor" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8c6778cc03bca978b2575a03e04e5ba6f430a9dd9b0f1259f0a8a9a5e5cc66" -dependencies = [ - "bstr", - "btoi", - "gix-date", - "itoa", - "thiserror", - "winnow", -] - -[[package]] -name = "gix-bitmap" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ccab4bc576844ddb51b78d81b4a42d73e6229660fa614dfc3d3999c874d1959" -dependencies = [ - "thiserror", -] - -[[package]] -name = "gix-chunk" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b42ea64420f7994000130328f3c7a2038f639120518870436d31b8bde704493" -dependencies = [ - "thiserror", -] - -[[package]] -name = "gix-commitgraph" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4676ede3a7d37e7028e2889830349a6aca22efc1d2f2dd9fa3351c1a8ddb0c6a" -dependencies = [ - "bstr", - "gix-chunk", - "gix-features", - "gix-hash", - "memmap2", - "thiserror", -] - -[[package]] -name = "gix-config" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1108c4ac88248dd25cc8ab0d0dae796e619fb72d92f88e30e00b29d61bb93cc4" -dependencies = [ - "bstr", - "gix-config-value", - "gix-features", - "gix-glob", - "gix-path", - "gix-ref", - "gix-sec", - "memchr", - "once_cell", - "smallvec", - "thiserror", - "unicode-bom", - "winnow", -] - -[[package]] -name = "gix-config-value" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea7505b97f4d8e7933e29735a568ba2f86d8de466669d9f0e8321384f9972f47" -dependencies = [ - "bitflags 2.4.0", - "bstr", - "gix-path", - "libc", - "thiserror", -] - -[[package]] -name = "gix-date" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7df669639582dc7c02737642f76890b03b5544e141caba68a7d6b4eb551e0d" -dependencies = [ - "bstr", - "itoa", - "thiserror", - "time 0.3.28", -] - -[[package]] -name = "gix-diff" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45e342d148373bd9070d557e6fb1280aeae29a3e05e32506682d027278501eb" -dependencies = [ - "gix-hash", - "gix-object", - "thiserror", -] - -[[package]] -name = "gix-discover" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4cacda5ee9dd1b38b0e2506834e40e66c08cf050ef55c344334c76745f277b" -dependencies = [ - "bstr", - "dunce", - "gix-hash", - "gix-path", - "gix-ref", - "gix-sec", - "thiserror", -] - -[[package]] -name = "gix-features" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f414c99e1a7abc69b21f3225a6539d203b0513f1d1d448607c4ea81cdcf9ee59" -dependencies = [ - "crc32fast", - "flate2", - "gix-hash", - "gix-trace", - "libc", - "once_cell", - "prodash", - "sha1_smol", - "thiserror", - "walkdir", -] - -[[package]] -name = "gix-fs" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "404795da3d4c660c9ab6c3b2ad76d459636d1e1e4b37b0c7ff68eee898c298d4" -dependencies = [ - "gix-features", -] - -[[package]] -name = "gix-glob" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ac79c444193b0660fe0c0925d338bd338bd643e32138784dccfb12c628b892" -dependencies = [ - "bitflags 2.4.0", - "bstr", - "gix-features", - "gix-path", -] - -[[package]] -name = "gix-hash" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ccf425543779cddaa4a7c62aba3fa9d90ea135b160be0a72dd93c063121ad4a" -dependencies = [ - "faster-hex", - "thiserror", -] - -[[package]] -name = "gix-hashtable" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "409268480841ad008e81c17ca5a293393fbf9f2b6c2f85b8ab9de1f0c5176a16" -dependencies = [ - "gix-hash", - "hashbrown 0.14.0", - "parking_lot", -] - -[[package]] -name = "gix-index" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9599fc30b3d6aad231687a403f85dfa36ae37ccf1b68ee1f621ad5b7fc7a0d" -dependencies = [ - "bitflags 2.4.0", - "bstr", - "btoi", - "filetime", - "gix-bitmap", - "gix-features", - "gix-fs", - "gix-hash", - "gix-lock", - "gix-object", - "gix-traverse", - "itoa", - "memmap2", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-lock" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1568c3d90594c60d52670f325f5db88c2d572e85c8dd45fabc23d91cadb0fd52" -dependencies = [ - "gix-tempfile", - "gix-utils", - "thiserror", -] - -[[package]] -name = "gix-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d8acb5ee668d55f0f2d19a320a3f9ef67a6999ad483e11135abcc2464ed18b6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "gix-object" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5528d5b2c984044d547e696e44a8c45fa122e83cd8c2ac1da69bd474336be8" -dependencies = [ - "bstr", - "btoi", - "gix-actor", - "gix-date", - "gix-features", - "gix-hash", - "gix-validate", - "itoa", - "smallvec", - "thiserror", - "winnow", -] - -[[package]] -name = "gix-odb" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0446eca295459deb3d6dd6ed7d44a631479f1b7381d8087166605c7a9f717c6" -dependencies = [ - "arc-swap", - "gix-date", - "gix-features", - "gix-hash", - "gix-object", - "gix-pack", - "gix-path", - "gix-quote", - "parking_lot", - "tempfile", - "thiserror", -] - -[[package]] -name = "gix-pack" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be19ee650300d7cbac5829b637685ec44a8d921a7c2eaff8a245d8f2f008870c" -dependencies = [ - "clru", - "gix-chunk", - "gix-features", - "gix-hash", - "gix-hashtable", - "gix-object", - "gix-path", - "gix-tempfile", - "memmap2", - "parking_lot", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-path" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a1d370115171e3ae03c5c6d4f7d096f2981a40ddccb98dfd704c773530ba73b" -dependencies = [ - "bstr", - "gix-trace", - "home", - "once_cell", - "thiserror", -] - -[[package]] -name = "gix-quote" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475c86a97dd0127ba4465fbb239abac9ea10e68301470c9791a6dd5351cdc905" -dependencies = [ - "bstr", - "btoi", - "thiserror", -] - -[[package]] -name = "gix-ref" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cccbfa8d5cd9b86465f27a521e0c017de54b92d9fd37c143e49c658a2f04f3a" -dependencies = [ - "gix-actor", - "gix-date", - "gix-features", - "gix-fs", - "gix-hash", - "gix-lock", - "gix-object", - "gix-path", - "gix-tempfile", - "gix-validate", - "memmap2", - "thiserror", - "winnow", -] - -[[package]] -name = "gix-refspec" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678ba30d95baa5462df9875628ed40655d5f5b8aba7028de86ed57f36e762c6c" -dependencies = [ - "bstr", - "gix-hash", - "gix-revision", - "gix-validate", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-revision" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e80a5992ae446fe1745dd26523b86084e3f1b6b3e35377fe09b4f35ac8f151" -dependencies = [ - "bstr", - "gix-date", - "gix-hash", - "gix-hashtable", - "gix-object", - "gix-revwalk", - "gix-trace", - "thiserror", -] - -[[package]] -name = "gix-revwalk" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b806349bc1f668e09035800e07ac8045da4e39a8925a245d93142c4802224ec1" -dependencies = [ - "gix-commitgraph", - "gix-date", - "gix-hash", - "gix-hashtable", - "gix-object", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-sec" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b9542ac025a8c02ed5d17b3fc031a111a384e859d0be3532ec4d58c40a0f28" -dependencies = [ - "bitflags 2.4.0", - "gix-path", - "libc", - "windows", -] - -[[package]] -name = "gix-tempfile" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2762b91ff95e27ff3ea95758c0d4efacd7435a1be3629622928b8276de0f72a8" -dependencies = [ - "gix-fs", - "libc", - "once_cell", - "parking_lot", - "signal-hook", - "signal-hook-registry", - "tempfile", -] - -[[package]] -name = "gix-trace" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b6d623a1152c3facb79067d6e2ecdae48130030cf27d6eb21109f13bd7b836" - -[[package]] -name = "gix-traverse" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec6358f8373fb018af8fc96c9d2ec6a5b66999e2377dc40b7801351fec409ed" -dependencies = [ - "gix-commitgraph", - "gix-date", - "gix-hash", - "gix-hashtable", - "gix-object", - "gix-revwalk", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-url" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c79d595b99a6c7ab274f3c991735a0c0f5a816a3da460f513c48edf1c7bf2cc" -dependencies = [ - "bstr", - "gix-features", - "gix-path", - "home", - "thiserror", - "url", -] - -[[package]] -name = "gix-utils" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85d89dc728613e26e0ed952a19583744e7f5240fcd4aa30d6c824ffd8b52f0f" -dependencies = [ - "fastrand", -] - -[[package]] -name = "gix-validate" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05cab2b03a45b866156e052aa38619f4ece4adcb2f79978bfc249bc3b21b8c5" -dependencies = [ - "bstr", - "thiserror", -] - -[[package]] -name = "group" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c363a5301b8f153d80747126a04b3c82073b9fe3130571a9d170cacdeaf7912" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 1.9.3", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - -[[package]] -name = "headers" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" -dependencies = [ - "base64 0.21.4", - "bytes", - "headers-core", - "http", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] - -[[package]] -name = "hkdf" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b" -dependencies = [ - "digest 0.9.0", - "hmac", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.4.9", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "id-arena" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg 1.1.0", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" -dependencies = [ - "equivalent", - "hashbrown 0.14.0", -] - -[[package]] -name = "int_traits" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b33c9a5c599d67d051c4dc25eb1b6b4ef715d1763c20c85c688717a1734f204e" - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.2", - "libc", - "windows-sys", -] - -[[package]] -name = "iroha" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "async-trait", - "color-eyre", - "dashmap", - "displaydoc", - "eyre", - "futures", - "iroha_cli_derive", - "iroha_config", - "iroha_core", - "iroha_crypto", - "iroha_data_model", - "iroha_futures", - "iroha_genesis", - "iroha_logger", - "iroha_macro", - "iroha_p2p", - "iroha_schema_gen", - "iroha_telemetry", - "iroha_version", - "iroha_wasm_builder", - "once_cell", - "owo-colors", - "parity-scale-codec", - "serde", - "serde_json", - "supports-color 2.0.0", - "tempfile", - "thiserror", - "thread-local-panic-hook", - "tokio", - "tracing", - "uuid", - "vergen", - "warp", -] - -[[package]] -name = "iroha_2_examples" -version = "0.1.0" -dependencies = [ - "eyre", - "iroha", - "iroha_client", - "iroha_config", - "iroha_crypto", - "iroha_data_model", - "iroha_genesis", - "serde", - "serde_json", - "test_network", - "tokio", -] - -[[package]] -name = "iroha_cli_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "iroha_client" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "attohttpc", - "base64 0.13.1", - "derive_more", - "displaydoc", - "eyre", - "futures-util", - "http", - "iroha_config", - "iroha_crypto", - "iroha_data_model", - "iroha_logger", - "iroha_primitives", - "iroha_telemetry", - "iroha_version", - "iroha_wasm_builder", - "parity-scale-codec", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-tungstenite 0.16.1", - "tungstenite 0.16.0", - "url", -] - -[[package]] -name = "iroha_config" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "cfg-if", - "derive_more", - "displaydoc", - "eyre", - "iroha_config_base", - "iroha_crypto", - "iroha_data_model", - "iroha_primitives", - "json5", - "once_cell", - "path-absolutize", - "serde", - "serde_json", - "strum", - "thiserror", - "tracing", - "tracing-subscriber", - "url", -] - -[[package]] -name = "iroha_config_base" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "crossbeam", - "displaydoc", - "eyre", - "iroha_config_derive", - "iroha_crypto", - "json5", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "iroha_config_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "iroha_macro_utils", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "iroha_core" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "async-trait", - "crossbeam-queue", - "dashmap", - "derive_more", - "displaydoc", - "eyre", - "futures", - "iroha_config", - "iroha_crypto", - "iroha_data_model", - "iroha_futures", - "iroha_genesis", - "iroha_logger", - "iroha_macro", - "iroha_p2p", - "iroha_primitives", - "iroha_telemetry", - "iroha_version", - "iroha_wasm_codec", - "itertools", - "parity-scale-codec", - "parking_lot", - "rand 0.8.5", - "sealed", - "serde", - "serde_json", - "thiserror", - "tokio", - "wasmtime", -] - -[[package]] -name = "iroha_core_wasm_codec_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "once_cell", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "iroha_crypto" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "derive_more", - "getset", - "hex", - "iroha_macro", - "iroha_primitives", - "iroha_schema", - "parity-scale-codec", - "serde", - "serde_with", - "ursa", -] - -[[package]] -name = "iroha_data_model" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "base64 0.13.1", - "dashmap", - "derive_more", - "displaydoc", - "getset", - "iroha_crypto", - "iroha_data_model_derive", - "iroha_macro", - "iroha_primitives", - "iroha_schema", - "iroha_version", - "parity-scale-codec", - "serde", - "serde_json", - "serde_with", - "strum", - "thiserror", - "tokio", - "warp", -] - -[[package]] -name = "iroha_data_model_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "iroha_macro_utils", - "proc-macro-error", - "proc-macro2", - "quote", - "serde_json", - "syn 1.0.109", -] - -[[package]] -name = "iroha_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "darling", - "manyhow", - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "iroha_futures" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "iroha_config", - "iroha_futures_derive", - "iroha_logger", - "rand 0.8.5", - "serde", - "serde_json", - "tokio", -] - -[[package]] -name = "iroha_futures_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "iroha_genesis" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "derive_more", - "eyre", - "iroha_config", - "iroha_crypto", - "iroha_data_model", - "iroha_logger", - "iroha_primitives", - "iroha_schema", - "once_cell", - "serde", - "serde_json", - "tracing", -] - -[[package]] -name = "iroha_logger" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "color-eyre", - "derive_more", - "iroha_config", - "iroha_data_model", - "once_cell", - "serde_json", - "tokio", - "tracing", - "tracing-bunyan-formatter", - "tracing-core", - "tracing-error", - "tracing-futures", - "tracing-subscriber", -] - -[[package]] -name = "iroha_macro" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "iroha_derive", -] - -[[package]] -name = "iroha_macro_utils" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "iroha_p2p" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "aead", - "async-stream", - "async-trait", - "bytes", - "derive_more", - "displaydoc", - "futures", - "iroha_config_base", - "iroha_crypto", - "iroha_data_model", - "iroha_data_model_derive", - "iroha_logger", - "iroha_primitives", - "parity-scale-codec", - "rand 0.8.5", - "thiserror", - "tokio", -] - -[[package]] -name = "iroha_primitives" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "derive_more", - "displaydoc", - "fixnum", - "iroha_macro", - "iroha_primitives_derive", - "iroha_schema", - "parity-scale-codec", - "serde", - "serde_with", - "smallstr", - "smallvec", - "thiserror", -] - -[[package]] -name = "iroha_primitives_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "manyhow", - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "iroha_schema" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "fixnum", - "iroha_schema_derive", - "serde", -] - -[[package]] -name = "iroha_schema_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "darling", - "manyhow", - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "iroha_schema_gen" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "iroha_crypto", - "iroha_data_model", - "iroha_genesis", - "iroha_primitives", - "iroha_schema", -] - -[[package]] -name = "iroha_telemetry" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "async-trait", - "chrono", - "eyre", - "futures", - "iroha_config", - "iroha_futures", - "iroha_logger", - "iroha_telemetry_derive", - "prometheus", - "serde", - "serde_json", - "streaming-stats", - "tokio", - "tokio-stream", - "tokio-tungstenite 0.17.2", - "url", - "vergen", -] - -[[package]] -name = "iroha_telemetry_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "iroha_version" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "iroha_macro", - "iroha_version_derive", - "parity-scale-codec", - "serde", - "serde_json", - "thiserror", - "warp", -] - -[[package]] -name = "iroha_version_derive" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "darling", - "manyhow", - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "iroha_wasm_builder" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "eyre", - "path-absolutize", - "serde_json", - "sha256", - "wasm-opt", -] - -[[package]] -name = "iroha_wasm_codec" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "iroha_core_wasm_codec_derive", - "parity-scale-codec", - "thiserror", - "wasmtime", -] - -[[package]] -name = "is-terminal" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" -dependencies = [ - "hermit-abi 0.3.2", - "rustix 0.38.13", - "windows-sys", -] - -[[package]] -name = "is_ci" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" - -[[package]] -name = "ittapi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e0d0b7b3b53d92a7e8b80ede3400112a6b8b4c98d1f5b8b16bb787c780582c" -dependencies = [ - "anyhow", - "ittapi-sys", - "log", -] - -[[package]] -name = "ittapi-sys" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f8763c96e54e6d6a0dccc2990d8b5e33e3313aaeae6185921a3f4c1614a77c" -dependencies = [ - "cc", -] - -[[package]] -name = "jobserver" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json5" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" -dependencies = [ - "pest", - "pest_derive", - "serde", -] - -[[package]] -name = "k256" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903ae2481bcdfdb7b68e0a9baa4b7c9aff600b9ae2e8e5bb5833b8c91ab851ea" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2 0.9.9", -] - -[[package]] -name = "keccak" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - -[[package]] -name = "libc" -version = "0.2.148" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" - -[[package]] -name = "link-cplusplus" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" -dependencies = [ - "cc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" - -[[package]] -name = "lock_api" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" -dependencies = [ - "autocfg 1.1.0", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "manyhow" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd36e9fda56207708aaa550916d2b3fa2eb59fc4eeb711aabdcb995e29f27d6" -dependencies = [ - "darling_core", - "manyhow-macros", - "proc-macro2", - "quote", - "syn 1.0.109", - "syn 2.0.33", -] - -[[package]] -name = "manyhow-macros" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f77799897bae27ab96fc15f4a1139b0ae27bdcc9fa103032dae75112c1e781d1" -dependencies = [ - "proc-macro-utils", - "proc-macro2", - "quote", -] - -[[package]] -name = "memchr" -version = "2.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" - -[[package]] -name = "memfd" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" -dependencies = [ - "rustix 0.37.23", -] - -[[package]] -name = "memmap2" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", -] - -[[package]] -name = "miracl_core" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4330eca86d39f2b52d0481aa1e90fe21bfa61f11b0bf9b48ab95595013cefe48" - -[[package]] -name = "multer" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http", - "httparse", - "log", - "memchr", - "mime", - "spin", - "version_check", -] - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-traits" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.2", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - -[[package]] -name = "object" -version = "0.30.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" -dependencies = [ - "crc32fast", - "hashbrown 0.13.2", - "indexmap 1.9.3", - "memchr", -] - -[[package]] -name = "object" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "openssl" -version = "0.10.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" -dependencies = [ - "bitflags 2.4.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "owo-colors" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" -dependencies = [ - "supports-color 1.3.1", -] - -[[package]] -name = "parity-scale-codec" -version = "3.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" -dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" -dependencies = [ - "backtrace", - "cfg-if", - "libc", - "petgraph", - "redox_syscall 0.3.5", - "smallvec", - "thread-id", - "windows-targets", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "path-absolutize" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5" -dependencies = [ - "path-dedot", -] - -[[package]] -name = "path-dedot" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397" -dependencies = [ - "once_cell", -] - -[[package]] -name = "percent-encoding" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" - -[[package]] -name = "pest" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "pest_meta" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" -dependencies = [ - "once_cell", - "pest", - "sha2 0.10.7", -] - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap 2.0.0", -] - -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3ef9b64d26bad0536099c816c6734379e45bbd5f14798def6809e5cc350447" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "poly1305" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7456bc1ad2d4cf82b3a016be4c2ac48daf11bf990c1603ebd447fe6f30fca8" -dependencies = [ - "cpuid-bool", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" -dependencies = [ - "cpuid-bool", - "opaque-debug 0.3.0", - "universal-hash", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f59e109e2f795a5070e69578c4dc101068139f74616778025ae1011d4cd41a8" -dependencies = [ - "proc-macro2", - "quote", - "smallvec", -] - -[[package]] -name = "proc-macro2" -version = "1.0.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prodash" -version = "26.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf" - -[[package]] -name = "prometheus" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "thiserror", -] - -[[package]] -name = "psm" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" -dependencies = [ - "cc", -] - -[[package]] -name = "pulldown-cmark" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" -dependencies = [ - "bitflags 1.3.2", - "memchr", - "unicase", -] - -[[package]] -name = "quote" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_pcg", - "rand_xorshift", - "winapi", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.1", - "rand_core 0.5.1", - "rand_hc 0.2.0", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", -] - -[[package]] -name = "rand_chacha" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" -dependencies = [ - "c2-chacha", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.10", -] - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rayon" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regalloc2" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b4dcbd3a2ae7fb94b5813fa0e957c6ab51bf5d0a8ee1b69e0c2d0f1e6eb8485" -dependencies = [ - "hashbrown 0.13.2", - "log", - "rustc-hash", - "slice-group-by", - "smallvec", -] - -[[package]] -name = "regex" -version = "1.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustix" -version = "0.37.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys", -] - -[[package]] -name = "rustix" -version = "0.38.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662" -dependencies = [ - "bitflags 2.4.0", - "errno", - "libc", - "linux-raw-sys 0.4.7", - "windows-sys", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" -dependencies = [ - "base64 0.21.4", -] - -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - -[[package]] -name = "ryu" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scratch" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" - -[[package]] -name = "sealed" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a8caec23b7800fb97971a1c6ae365b6239aaeddfb934d6265f8505e795699d" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "secp256k1" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb" -dependencies = [ - "rand 0.6.5", - "secp256k1-sys", - "serde", -] - -[[package]] -name = "secp256k1-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" - -[[package]] -name = "serde" -version = "1.0.188" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_bytes" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.188" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "serde_json" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha-1" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha256" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7895c8ae88588ccead14ff438b939b0c569cd619116f14b4d13fdff7b8333386" -dependencies = [ - "async-trait", - "bytes", - "hex", - "sha2 0.10.7", - "tokio", -] - -[[package]] -name = "sha3" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf" -dependencies = [ - "block-buffer 0.7.3", - "byte-tools", - "digest 0.8.1", - "keccak", - "opaque-debug 0.2.3", -] - -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signal-hook" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2807892cfa58e081aa1f1111391c7a0649d4fa127a4ffbe34bcbfb35a1171a4" -dependencies = [ - "digest 0.9.0", - "rand_core 0.6.4", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - -[[package]] -name = "smallstr" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b1aefdf380735ff8ded0b15f31aab05daf1f70216c01c02a12926badd1df9d" -dependencies = [ - "serde", - "smallvec", -] - -[[package]] -name = "smallvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" -dependencies = [ - "serde", -] - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spki" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32" -dependencies = [ - "der", -] - -[[package]] -name = "sptr" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "streaming-stats" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d670ce4e348a2081843569e0f79b21c99c91bb9028b3b3ecb0f050306de547" -dependencies = [ - "num-traits", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "supports-color" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6f" -dependencies = [ - "atty", - "is_ci", -] - -[[package]] -name = "supports-color" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4950e7174bffabe99455511c39707310e7e9b440364a2fcb1cc21521be57b354" -dependencies = [ - "is-terminal", - "is_ci", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9caece70c63bfba29ec2fed841a09851b14a235c60010fa4de58089b6c025668" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "unicode-xid", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "target-lexicon" -version = "0.12.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" - -[[package]] -name = "tempfile" -version = "3.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix 0.38.13", - "windows-sys", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "test_network" -version = "2.0.0-pre-rc.19" -source = "git+https://github.com/hyperledger/iroha.git?branch=iroha2-dev#d11139603b884aeae6fdf967dc49d11e063b5154" -dependencies = [ - "eyre", - "futures", - "iroha", - "iroha_client", - "iroha_config", - "iroha_core", - "iroha_crypto", - "iroha_data_model", - "iroha_genesis", - "iroha_logger", - "iroha_primitives", - "parity-scale-codec", - "rand 0.8.5", - "serde_json", - "tempfile", - "tokio", - "unique_port", -] - -[[package]] -name = "thiserror" -version = "1.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "thread-id" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79474f573561cdc4871a0de34a51c92f7f5a56039113fbb5b9c9f96bdb756669" -dependencies = [ - "libc", - "redox_syscall 0.2.16", - "winapi", -] - -[[package]] -name = "thread-local-panic-hook" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70399498abd3ec85f99a2f2d765c8638588e20361678af93a9f47de96719743" - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" -dependencies = [ - "deranged", - "itoa", - "libc", - "num_threads", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.5.4", - "tokio-macros", - "windows-sys", -] - -[[package]] -name = "tokio-macros" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e80b39df6afcc12cdf752398ade96a6b9e99c903dfdc36e53ad10b9c366bca72" -dependencies = [ - "futures-util", - "log", - "native-tls", - "tokio", - "tokio-native-tls", - "tungstenite 0.16.0", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite 0.17.3", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite 0.18.0", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.0.0", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "tracing-bunyan-formatter" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c266b9ac83dedf0e0385ad78514949e6d89491269e7065bee51d2bb8ec7373" -dependencies = [ - "ahash", - "gethostname", - "log", - "serde", - "serde_json", - "time 0.3.28", - "tracing", - "tracing-core", - "tracing-log", - "tracing-subscriber", -] - -[[package]] -name = "tracing-core" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-error" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" -dependencies = [ - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" -dependencies = [ - "nu-ansi-term", - "sharded-slab", - "thread_local", - "tracing-core", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "tungstenite" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad3713a14ae247f22a728a0456a545df14acf3867f905adff84be99e23b3ad1" -dependencies = [ - "base64 0.13.1", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "native-tls", - "rand 0.8.5", - "sha-1 0.9.8", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "tungstenite" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" -dependencies = [ - "base64 0.13.1", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "rand 0.8.5", - "sha-1 0.10.1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "tungstenite" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" -dependencies = [ - "base64 0.13.1", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "rand 0.8.5", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-trie" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" - -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-bom" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98e90c70c9f0d4d1ee6d0a7d04aa06cb9bbd53d8cfbdd62a0269a7c2eb640552" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "unique_port" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3f903132efabcb4242e0bbf16aedb2c3867526e42126b6ed3cb1b0bc4577708" -dependencies = [ - "once_cell", -] - -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] - -[[package]] -name = "url" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "ursa" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8760a62e18e4d3e3f599e15c09a9f9567fd9d4a90594d45166162be8d232e63b" -dependencies = [ - "aead", - "aes", - "aes-gcm", - "amcl", - "amcl_wrapper", - "arrayref", - "blake2", - "block-modes", - "block-padding 0.2.1", - "chacha20poly1305", - "curve25519-dalek", - "ed25519-dalek", - "failure", - "hex", - "hkdf", - "hmac", - "int_traits", - "k256", - "lazy_static", - "log", - "openssl", - "rand 0.7.3", - "rand_chacha 0.2.1", - "secp256k1", - "serde", - "sha2 0.9.9", - "sha3 0.9.1", - "subtle", - "time 0.1.45", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" -dependencies = [ - "getrandom 0.2.10", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vergen" -version = "8.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e7dc29b3c54a2ea67ef4f953d5ec0c4085035c0ae2d325be1c0d2144bd9f16" -dependencies = [ - "anyhow", - "gix", - "rustversion", - "time 0.3.28", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "warp" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "headers", - "http", - "hyper", - "log", - "mime", - "mime_guess", - "multer", - "percent-encoding", - "pin-project", - "rustls-pemfile", - "scoped-tls", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-stream", - "tokio-tungstenite 0.18.0", - "tokio-util", - "tower-service", - "tracing", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.33", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" - -[[package]] -name = "wasm-encoder" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7" -dependencies = [ - "leb128", -] - -[[package]] -name = "wasm-opt" -version = "0.113.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65a2799e08026234b07b44da6363703974e75be21430cef00756bbc438c8ff8a" -dependencies = [ - "anyhow", - "libc", - "strum", - "strum_macros", - "tempfile", - "thiserror", - "wasm-opt-cxx-sys", - "wasm-opt-sys", -] - -[[package]] -name = "wasm-opt-cxx-sys" -version = "0.113.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d26f86d1132245e8bcea8fac7f02b10fb885b6696799969c94d7d3c14db5e1" -dependencies = [ - "anyhow", - "cxx", - "cxx-build", - "wasm-opt-sys", -] - -[[package]] -name = "wasm-opt-sys" -version = "0.113.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497d069cd3420cdd52154a320b901114a20946878e2de62c670f9d906e472370" -dependencies = [ - "anyhow", - "cc", - "cxx", - "cxx-build", -] - -[[package]] -name = "wasmparser" -version = "0.107.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e3ac9b780c7dda0cac7a52a5d6d2d6707cc6e3451c9db209b6c758f40d7acb" -dependencies = [ - "indexmap 1.9.3", - "semver", -] - -[[package]] -name = "wasmtime" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b1f817f2ca5070983c71f1205fbab5848c9073df7f4e1af9fdceb4cc4a1b8e5" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bumpalo", - "cfg-if", - "fxprof-processed-profile", - "indexmap 1.9.3", - "libc", - "log", - "object 0.30.4", - "once_cell", - "paste", - "psm", - "rayon", - "serde", - "serde_json", - "target-lexicon", - "wasmparser", - "wasmtime-cache", - "wasmtime-component-macro", - "wasmtime-cranelift", - "wasmtime-environ", - "wasmtime-fiber", - "wasmtime-jit", - "wasmtime-runtime", - "wat", - "windows-sys", -] - -[[package]] -name = "wasmtime-asm-macros" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f82fbfda4610e9225238c62574ecded8e9d6ad3a12f387ac45819ecad5c3f9b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "wasmtime-cache" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f5b87f1ed383d6c219c04467ab6ae87990d6c2815d5a990138990a7fcbab95" -dependencies = [ - "anyhow", - "base64 0.21.4", - "bincode", - "directories-next", - "file-per-thread-logger", - "log", - "rustix 0.37.23", - "serde", - "sha2 0.10.7", - "toml", - "windows-sys", - "zstd", -] - -[[package]] -name = "wasmtime-component-macro" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27b96c540c78e12b60025fcbc0ba8a55bff1b32885a5e8eae2df765a6bc97ac" -dependencies = [ - "anyhow", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasmtime-component-util", - "wasmtime-wit-bindgen", - "wit-parser", -] - -[[package]] -name = "wasmtime-component-util" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0928fe66c22bf8887e2fb524b7647308b8ce836a333af8504e4f1d80b8ea849f" - -[[package]] -name = "wasmtime-cranelift" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659f6e58662d1131f250339acd03aa49377f9351474282699985b79ca4d4a7c" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-control", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli 0.27.3", - "log", - "object 0.30.4", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-cranelift-shared", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-cranelift-shared" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74171de083bf2ecb716c507900f825e2b858346c714fbf48f4763ea760f998a8" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-control", - "cranelift-native", - "gimli 0.27.3", - "object 0.30.4", - "target-lexicon", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-environ" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b124cbac1a3e04a744c76b3f77919343ef16dc4c818a2406dd7b689b16a54639" -dependencies = [ - "anyhow", - "cranelift-entity", - "gimli 0.27.3", - "indexmap 1.9.3", - "log", - "object 0.30.4", - "serde", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "wasmtime-fiber" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92ffb8869395c63100ffefbd71cf9489e7e9218e63a3798dcfe93fa8945f9cf" -dependencies = [ - "cc", - "cfg-if", - "rustix 0.37.23", - "wasmtime-asm-macros", - "windows-sys", -] - -[[package]] -name = "wasmtime-jit" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ff15f426c2378f32ffb6d9b4370e3504231492e93f6968e8b5102c3256bbc4" -dependencies = [ - "addr2line 0.19.0", - "anyhow", - "bincode", - "cfg-if", - "cpp_demangle", - "gimli 0.27.3", - "ittapi", - "log", - "object 0.30.4", - "rustc-demangle", - "rustix 0.37.23", - "serde", - "target-lexicon", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-jit-icache-coherence", - "wasmtime-runtime", - "windows-sys", -] - -[[package]] -name = "wasmtime-jit-debug" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c549e219102426aa1f90bd18e56a3195ed1e696c318abb3f501c1f4924b530ac" -dependencies = [ - "object 0.30.4", - "once_cell", - "rustix 0.37.23", -] - -[[package]] -name = "wasmtime-jit-icache-coherence" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cf02fedda287a409cff80ad40a7c6c0f0771e99b0cd5e2b79d9cb7ecdc1b2f4" -dependencies = [ - "cfg-if", - "libc", - "windows-sys", -] - -[[package]] -name = "wasmtime-runtime" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc38c6229a5d3b8a2528eb33eb11d3e7ebf570259c7cd2f01e8668fe783ea443" -dependencies = [ - "anyhow", - "cc", - "cfg-if", - "indexmap 1.9.3", - "libc", - "log", - "mach", - "memfd", - "memoffset 0.8.0", - "paste", - "rand 0.8.5", - "rustix 0.37.23", - "sptr", - "wasmtime-asm-macros", - "wasmtime-environ", - "wasmtime-fiber", - "wasmtime-jit-debug", - "windows-sys", -] - -[[package]] -name = "wasmtime-types" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "768f6c5e7afc3a02eff2753196741db8e5ac5faf26a1e2204d7341b30a637c6f" -dependencies = [ - "cranelift-entity", - "serde", - "thiserror", - "wasmparser", -] - -[[package]] -name = "wasmtime-wit-bindgen" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a4a005a6a2d5faa7cd953d389da8ae979cb571fe40edec7769649d8c98d874" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wast" -version = "64.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc" -dependencies = [ - "leb128", - "memchr", - "unicode-width", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6" -dependencies = [ - "wast", -] - -[[package]] -name = "wildmatch" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee583bdc5ff1cf9db20e9db5bb3ff4c3089a8f6b8b31aff265c9aba85812db86" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "winnow" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-parser" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6daec9f093dbaea0e94043eeb92ece327bbbe70c86b1f41aca9bbfefd7f050f0" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 1.9.3", - "log", - "pulldown-cmark", - "semver", - "unicode-xid", - "url", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077" -dependencies = [ - "curve25519-dalek", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "zeroize" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.33", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" -dependencies = [ - "cc", - "libc", - "pkg-config", -] diff --git a/Rust/Cargo.toml b/Rust/Cargo.toml index 9d11221..7ee0955 100644 --- a/Rust/Cargo.toml +++ b/Rust/Cargo.toml @@ -1,10 +1,10 @@ [package] -name = "iroha_2_examples" +name = "iroha_examples" version = "0.1.0" edition = "2021" authors = ["Iroha 2 team "] -description = "Example repository for Iroha 2 ledger" +description = "Hyperledger Iroha 2 code examples" repository = "https://github.com/hyperledger/iroha-2-examples" documentation = "https://hyperledger.github.io/iroha-2-docs" homepage = "https://iroha.tech" @@ -14,17 +14,7 @@ keywords = ["blockchain", "crypto", "iroha", "ledger"] categories = ["cryptography::cryptocurrencies"] [dependencies] -iroha = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } -iroha_crypto = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } -iroha_client = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } -iroha_config = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } -iroha_data_model = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } -iroha_genesis = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } -test_network = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } - -eyre = "0.6.8" - -serde = { version = "1.0.151", default-features = false } -serde_json = { version = "1.0.91", default-features = false } - -tokio = "1.23.0" +iroha = { version = "=2.0.0-rc.1.0", git = "https://github.com/hyperledger-iroha/iroha.git" } +iroha_executor_data_model = { version = "=2.0.0-rc.1.0", git = "https://github.com/hyperledger-iroha/iroha.git" } +eyre = "0.6.12" +serde_json = "1.0.128" diff --git a/Rust/README.md b/Rust/README.md index afcae99..3da2cbc 100644 --- a/Rust/README.md +++ b/Rust/README.md @@ -1,23 +1,20 @@ -# Rust examples for Iroha 2 +# Rust examples for Hyperledger Iroha -This directory contains the examples from the [Rust tutorial](https://hyperledger.github.io/iroha-2-docs/guide/rust.html#_2-configuring-iroha-2). +This project contains code examples to help you get started using the Rust SDK for Hyperledger Iroha, as well as understand Iroha conceptually. ## Running the examples -To run the examples, you need to install [`cargo-nextest`](https://nexte.st/) first. +To run the examples, you should have a running Iroha network with the default genesis block configuration. Some examples depend on other examples being executed. Examples without dependencies are good starting points: -```bash -cargo install cargo-nextest -``` +- [`domain_register`](examples/domain_register.rs) -After it is installed, type: +## Helper library -```bash -cargo nextest run -``` +A small helper library is included to facilitate defining actors and props involved in the examples while avoiding repetition of the parsing logic, etc. -You'll Cargo install the packages that are needed for the tests and the test code will run. +### Usage -## Extending the example set - -Simply add a file with Rust code to the [`examples`](./examples/) directory. It will be launched by `cargo-nextest` on its next run. +* Define primitives like domains (`Wonderland`, `Chess`), signatories (`Alice`, `Bob`, `Magnus`), assets (`Money`, `Roses`, `Clothes`), and more using traits like `ExampleDomain`, `ExampleSignatory` `ExampleAssetName` and others. +* Combine primitives into compound types for accounts (`AliceInWonderland`, `BobInChess`), asset definitions (`WonderlandRoses`, `ChessClothes`) and more using `ExampleAccount`, `ExampleAssetDefinition`, etc. +* Easily construct identifiers (`BobInWonderland::account_id()`, `ClothesOfBobInChess::asset_id()`) as needed. +* Construct clients acting on behalf of various accounts using `AliceInWonderland::client()`, `BobInChess::client()`. \ No newline at end of file diff --git a/Rust/configs/alice_chess.toml b/Rust/configs/alice_chess.toml new file mode 100644 index 0000000..d187943 --- /dev/null +++ b/Rust/configs/alice_chess.toml @@ -0,0 +1,13 @@ +chain = "00000000-0000-0000-0000-000000000000" +torii_url = "http://127.0.0.1:8080/" + +[basic_auth] +web_login = "mad_hatter" +password = "ilovetea" + +[account] +# Domain in which Alice has an authority +domain = "chess" +# Alice's key pair +public_key = "ed0120CE7FA46C9DCE7EA4B125E2E36BDB63EA33073E7590AC92816AE1E861B7048B03" +private_key = "802620CCF31D85E3B32A4BEA59987CE0C78E3B8E2DB93881468AB2435FE45D5C9DCD53" diff --git a/Rust/configs/alice_wonderland.toml b/Rust/configs/alice_wonderland.toml new file mode 100644 index 0000000..dc3532f --- /dev/null +++ b/Rust/configs/alice_wonderland.toml @@ -0,0 +1,13 @@ +chain = "00000000-0000-0000-0000-000000000000" +torii_url = "http://127.0.0.1:8080/" + +[basic_auth] +web_login = "mad_hatter" +password = "ilovetea" + +[account] +# Domain in which Alice has an authority +domain = "wonderland" +# Alice's key pair +public_key = "ed0120CE7FA46C9DCE7EA4B125E2E36BDB63EA33073E7590AC92816AE1E861B7048B03" +private_key = "802620CCF31D85E3B32A4BEA59987CE0C78E3B8E2DB93881468AB2435FE45D5C9DCD53" diff --git a/Rust/configs/bob_chess.toml b/Rust/configs/bob_chess.toml new file mode 100644 index 0000000..3b8f7e5 --- /dev/null +++ b/Rust/configs/bob_chess.toml @@ -0,0 +1,13 @@ +chain = "00000000-0000-0000-0000-000000000000" +torii_url = "http://127.0.0.1:8080/" + +[basic_auth] +web_login = "mad_hatter" +password = "ilovetea" + +[account] +# Domain in which Bob has an authority +domain = "chess" +# Bob's key pair +public_key = "ed012004FF5B81046DDCCF19E2E451C45DFB6F53759D4EB30FA2EFA807284D1CC33016" +private_key = "802620AF3F96DEEF44348FEB516C057558972CEC4C75C4DB9C5B3AAC843668854BF828" diff --git a/Rust/configs/bob_wonderland.toml b/Rust/configs/bob_wonderland.toml new file mode 100644 index 0000000..5d71906 --- /dev/null +++ b/Rust/configs/bob_wonderland.toml @@ -0,0 +1,13 @@ +chain = "00000000-0000-0000-0000-000000000000" +torii_url = "http://127.0.0.1:8080/" + +[basic_auth] +web_login = "mad_hatter" +password = "ilovetea" + +[account] +# Domain in which Bob has an authority +domain = "wonderland" +# Bob's key pair +public_key = "ed012004FF5B81046DDCCF19E2E451C45DFB6F53759D4EB30FA2EFA807284D1CC33016" +private_key = "802620AF3F96DEEF44348FEB516C057558972CEC4C75C4DB9C5B3AAC843668854BF828" diff --git a/Rust/examples/account_register.rs b/Rust/examples/account_register.rs new file mode 100644 index 0000000..6497de9 --- /dev/null +++ b/Rust/examples/account_register.rs @@ -0,0 +1,61 @@ +//! Shows how to register an account. +//! +//! Depends on the `domain_register` example. + +use iroha::client::Client; +use iroha::data_model::prelude::{ + Account, AccountId, FindAccounts, Grant, QueryBuilderExt, Register, Revoke, +}; +use iroha::data_model::Identifiable; +use iroha_examples::{ + AliceInChess, AliceInWonderland, BobInChess, BobInWonderland, Chess, ExampleDomain, + MagnusInChess, +}; +use iroha_executor_data_model::permission::account::CanRegisterAccount; + +fn main() -> iroha_examples::Result<()> { + // An account is created for a signatory in a domain. + // By default, only the owner of the domain can register accounts in it. + let as_alice_in_wland = AliceInWonderland::client(); + // The same signatory can have an account in different domains. + register(&as_alice_in_wland, AliceInChess::id())?; + + // The domain owner can also grant a permission to register accounts in the domain. + let can_register_accounts_in_chess = CanRegisterAccount { + domain: Chess::id(), + }; + // Grant the permission to Bob from Wonderland. + let bob_in_wland = BobInWonderland::id(); + as_alice_in_wland.submit_blocking(Grant::account_permission( + can_register_accounts_in_chess.clone(), + bob_in_wland.clone(), + ))?; + // Bob in Wonderland can now register accounts in Chess. + let as_bob_in_wland = BobInWonderland::client(); + register(&as_bob_in_wland, BobInChess::id())?; + register(&as_bob_in_wland, MagnusInChess::id())?; + // Revoke the permission from Bob in Wonderland. + as_alice_in_wland.submit_blocking(Revoke::account_permission( + can_register_accounts_in_chess, + bob_in_wland, + ))?; + Ok(()) +} + +fn register(as_who: &Client, account: AccountId) -> iroha_examples::Result<()> { + let register_account = Register::account(Account::new(account.clone())); + as_who.submit_blocking(register_account)?; + // Observe that the account has really been registered. + let account = as_who + .query(FindAccounts) + .filter_with(|acc| acc.id.eq(account)) + .execute_single()?; + println!( + "Account: {}\nRegistered by: {}", + account.id(), + as_who.account + ); + // Account: ed12...41@wonderland + // Registered by: ed01...12@wonderland + Ok(()) +} diff --git a/Rust/examples/account_unregister.rs b/Rust/examples/account_unregister.rs new file mode 100644 index 0000000..aa3139e --- /dev/null +++ b/Rust/examples/account_unregister.rs @@ -0,0 +1,35 @@ +//! Shows how to unregister an account. +//! +//! Depends on the `account_register` example. + +use iroha::client::Client; +use iroha::data_model::account::AccountId; +use iroha::data_model::prelude::{FindAccounts, QueryBuilderExt, Unregister}; + +use iroha_examples::{AliceInChess, AliceInWonderland, BobInChess, MagnusInChess}; + +fn main() -> iroha_examples::Result<()> { + // An account's owner can unregister that account. + let as_bob_in_chess = BobInChess::client(); + unregister(&as_bob_in_chess, BobInChess::id())?; + // A domain owner can unregister any account in that domain. + let as_alice_in_wland = AliceInWonderland::client(); + unregister(&as_alice_in_wland, AliceInChess::id())?; + unregister(&as_alice_in_wland, MagnusInChess::id())?; + Ok(()) +} + +fn unregister(as_who: &Client, account: AccountId) -> iroha_examples::Result<()> { + let unregister_account = Unregister::account(account.clone()); + as_who.submit_blocking(unregister_account)?; + // Observe that the account has really been unregistered. + as_who + .query(FindAccounts) + .filter_with(|acc| acc.id.eq(account.clone())) + .execute_single() + .expect_err("account should not be found"); + println!("Account: {account}\nUnregistered by: {}", as_who.account); + // Account: ed12...41@wonderland + // Unregistered by: ed01...12@wonderland + Ok(()) +} diff --git a/Rust/examples/asset_definition_register.rs b/Rust/examples/asset_definition_register.rs new file mode 100644 index 0000000..e57c887 --- /dev/null +++ b/Rust/examples/asset_definition_register.rs @@ -0,0 +1,96 @@ +//! Shows how to register asset definitions. +//! +//! Depends on `account_register`. + +use iroha::client::Client; +use iroha::data_model::asset::{AssetDefinition, AssetType}; +use iroha::data_model::ipfs::IpfsPath; +use iroha::data_model::isi::Grant; +use iroha::data_model::prelude::{ + FindAssetsDefinitions, Identifiable, Metadata, NewAssetDefinition, NumericSpec, + QueryBuilderExt, Register, Revoke, +}; +use iroha_examples::{ + AliceInWonderland, BobInChess, Chess, ChessBook, ChessPawns, ExampleDomain, WonderlandMoney, + WonderlandRoses, +}; +use iroha_executor_data_model::permission::asset_definition::CanRegisterAssetDefinition; + +fn main() -> iroha_examples::Result<()> { + let as_alice_in_wland = AliceInWonderland::client(); + // `rose#wonderland` are defined in the default genesis block. + println!( + "Wonderland Roses:\n{:#?}", + as_alice_in_wland + .query(FindAssetsDefinitions) + .filter_with(|asset_def| asset_def.id.eq(WonderlandRoses::id())) + .execute_single()? + ); + // Assets can be defined as either numeric or store. + // Numeric assets can be minted (increased) or burned (decreased). + // `money#wonderland` is a numeric asset with fractional values up to 2 decimal places. + register( + &as_alice_in_wland, + AssetDefinition::new( + WonderlandMoney::id(), + AssetType::Numeric(NumericSpec::fractional(2)), + ), + )?; + // Since `bob@chess` is not the owner of `chess`, `alice@wonderland` + // has to grant `bob@chess` permission to define assets in `chess`. + let bob_in_chess = BobInChess::id(); + let can_define_assets_in_chess = CanRegisterAssetDefinition { + domain: Chess::id(), + }; + // Grant the permission to `bob@chess`. + as_alice_in_wland.submit_blocking(Grant::account_permission( + can_define_assets_in_chess.clone(), + bob_in_chess.clone(), + ))?; + // `pawn#chess` is a numeric asset with integer values that can only be minted once, + // meaning that the asset has a globally fixed supply. + // + // `bob@chess` will be the owner of the definition of `pawn#chess`, + // meaning he will have the default right to mint/burn `pawn#chess`. + // Since `alice@wonderland` owns `chess`, she will also have that right. + register( + &BobInChess::client(), + AssetDefinition::new(ChessPawns::id(), AssetType::Numeric(NumericSpec::integer())) + .mintable_once(), + )?; + // Revoke the permission. + as_alice_in_wland.submit_blocking(Revoke::account_permission( + can_define_assets_in_chess, + bob_in_chess, + ))?; + // `book#chess` is a store asset. Store assets are not minted or burned. + // Instead, key-value pairs are set or removed for them. + // + // Here we also provide an optional IPFS path to the asset logo, + // and some metadata. Metadata is covered in detail in TODO(`metadata`) + register( + &as_alice_in_wland, + AssetDefinition::store(ChessBook::id()) + .with_logo("QmQqzMTavQgT4f4T5v6PWBp7XNKtoPmC9jvn12WPT3gkSE".parse::()?) + .with_metadata(Metadata::default()), + )?; + Ok(()) +} + +fn register(as_who: &Client, asset_definition: NewAssetDefinition) -> iroha_examples::Result<()> { + let asset_definition_id = asset_definition.id().clone(); + let define_asset = Register::asset_definition(asset_definition); + as_who.submit_blocking(define_asset)?; + let asset_definition = as_who + .query(FindAssetsDefinitions) + .filter_with(|asset_def| asset_def.id.eq(asset_definition_id)) + .execute_single()?; + println!( + "Asset definition: {}\nRegistered by: {}", + asset_definition.id(), + as_who.account + ); + // Asset definition: pawn#chess + // Registered by: ed01...12@wonderland + Ok(()) +} diff --git a/Rust/examples/asset_definition_unregister.rs b/Rust/examples/asset_definition_unregister.rs new file mode 100644 index 0000000..e41b7fa --- /dev/null +++ b/Rust/examples/asset_definition_unregister.rs @@ -0,0 +1,57 @@ +//! Shows how to unregister asset definitions. +//! +//! Depends on `asset_definition_register`. + +use iroha::client::Client; +use iroha::data_model::isi::Grant; +use iroha::data_model::prelude::{ + AssetDefinitionId, FindAssetsDefinitions, QueryBuilderExt, Revoke, Unregister, +}; +use iroha_executor_data_model::permission::asset_definition::CanUnregisterAssetDefinition; + +use iroha_examples::{AliceInWonderland, BobInChess, ChessBook, ChessPawns, WonderlandMoney}; + +fn main() -> iroha_examples::Result<()> { + let as_alice_in_wland = AliceInWonderland::client(); + // `alice@wonderland` owns the definition of `book#chess` + unregister(&as_alice_in_wland, ChessBook::id())?; + let as_bob_in_chess = BobInChess::client(); + // `bob@chess` owns the definition of `pawn#chess` + unregister(&as_bob_in_chess, ChessPawns::id())?; + // Since `bob@chess` is not the owner of `money#wonderland`, `alice@wonderland` + // has to grant `bob@chess` permission to unregister its definition. + let bob_in_chess = BobInChess::id(); + let wonderland_money = WonderlandMoney::id(); + let can_undefine_wonderland_money = CanUnregisterAssetDefinition { + asset_definition: wonderland_money.clone(), + }; + // Grant the permission to `bob@chess`. + as_alice_in_wland.submit_blocking(Grant::account_permission( + can_undefine_wonderland_money.clone(), + bob_in_chess.clone(), + ))?; + unregister(&as_bob_in_chess, wonderland_money)?; + // Revoke the permission. + as_alice_in_wland.submit_blocking(Revoke::account_permission( + can_undefine_wonderland_money, + bob_in_chess, + ))?; + Ok(()) +} + +fn unregister(as_who: &Client, asset_definition: AssetDefinitionId) -> iroha_examples::Result<()> { + let undefine_asset = Unregister::asset_definition(asset_definition.clone()); + as_who.submit_blocking(undefine_asset)?; + as_who + .query(FindAssetsDefinitions) + .filter_with(|asset_def| asset_def.id.eq(asset_definition.clone())) + .execute_single() + .expect_err("asset definition should not be found"); + println!( + "Asset definition: {}\nUnregistered by: {}", + asset_definition, as_who.account + ); + // Asset definition: pawn#chess + // Unregistered by: ed01...12@wonderland + Ok(()) +} diff --git a/Rust/examples/asset_numeric.rs b/Rust/examples/asset_numeric.rs new file mode 100644 index 0000000..2850324 --- /dev/null +++ b/Rust/examples/asset_numeric.rs @@ -0,0 +1,138 @@ +//! Shows how to mint, burn and transfer numeric assets. +//! +//! Depends on `asset_definition_register` + +use iroha::client::Client; +use iroha::data_model::prelude::{ + numeric, Asset, AssetId, AssetValue, Burn, FindAssets, Mint, Numeric, QueryBuilderExt, + Register, Transfer, +}; + +use iroha_examples::{ + AliceInChess, AliceInWonderland, BobInChess, BobInWonderland, MagnusInChess, + MoneyOfAliceInWonderland, MoneyOfBobInWonderland, PawnsOfAliceInChess, PawnsOfBobInChess, + WonderlandMoneyOfMagnusInChess, +}; + +fn main() -> iroha_examples::Result<()> { + let as_alice_in_wland = AliceInWonderland::client(); + let as_bob_in_wland = BobInWonderland::client(); + // When specific `money#wonderland` belongs to `alice@wonderland`, + // we call that her asset, `money##alice@wonderland`. + // Thus, an asset is an instance of an asset definition owned by an account. + let money_of_alice_in_wland = MoneyOfAliceInWonderland::id(); + let money_of_bob_in_wland = MoneyOfBobInWonderland::id(); + // `money#wonderland` can be held by accounts outside `wonderland`. + let wland_money_of_magnus_in_chess = WonderlandMoneyOfMagnusInChess::id(); + + // `alice@wonderland` can mint `money#wonderland` for herself, since + // she was the one who defined it. Someone holding a relevant permission + // can also mint an asset. + // + // Minting increases the asset's amount. + as_alice_in_wland.submit_all_blocking([ + Mint::asset_numeric(numeric!(1.25), money_of_alice_in_wland.clone()), + // `money#wonderland` is defined to be mintable repeatedly, + // therefore we can repeat the Mint instruction as much as we want. + Mint::asset_numeric(numeric!(1.25), money_of_alice_in_wland.clone()), + Mint::asset_numeric(numeric!(1.25), money_of_alice_in_wland.clone()), + Mint::asset_numeric(numeric!(1.25), money_of_alice_in_wland.clone()), + ])?; + // Observe that `alice@wonderland` has 5 of `money#wonderland`. + as_alice_in_wland.assert_asset_eq(money_of_alice_in_wland.clone(), numeric!(5)); + // Now that `alice@wonderland` has some of `money#wonderland`, + // she can burn it. An asset can be burned by its owner, + // the owner of its definition, and a holder of a relevant permission. + // + // Burning decreases the asset's amount. + // You cannot burn more of the asset that is actually owned. + as_alice_in_wland.submit_all_blocking([ + Burn::asset_numeric(numeric!(0.01), money_of_alice_in_wland.clone()), + Burn::asset_numeric(numeric!(1.01), money_of_alice_in_wland.clone()), + Burn::asset_numeric(numeric!(2.01), money_of_alice_in_wland.clone()), + ])?; + // Observe that `alice@wonderland` has 1.97 of `money#wonderland` left. + as_alice_in_wland.assert_asset_eq(money_of_alice_in_wland.clone(), numeric!(1.97)); + as_alice_in_wland.submit_blocking( + // `alice@wonderland` can transfer some of her `money#wonderland` to another account. + // Like with minting, an asset can be transferred by its owner, the owner of + // its definition, or someone with a relevant permission. + Transfer::asset_numeric( + money_of_alice_in_wland.clone(), + numeric!(1.4), + BobInWonderland::id(), + ), + )?; + // `alice@wonderland` observes that she has 0.57 of `money#wonderland` left. + as_alice_in_wland.assert_asset_eq(money_of_alice_in_wland.clone(), numeric!(0.57)); + // `bob@wonderland` observes that he has 1.4 of `money#wonderland` now. + // He can do that because he owns `money##bob@wonderland`. + as_bob_in_wland.assert_asset_eq(money_of_bob_in_wland.clone(), numeric!(1.4)); + as_bob_in_wland.submit_blocking( + // `bob@wonderland` can transfer some of his `money#wonderland` to `magnus@chess`. + // Note how `money#wonderland` can be held by accounts in different domains. + Transfer::asset_numeric(money_of_bob_in_wland, numeric!(0.7), MagnusInChess::id()), + )?; + // `alice@wonderland` observes that `magnus@chess` has 0.7 of `money#wonderland`. + // She can do that because she owns the definition of `money#wonderland`. + as_alice_in_wland.assert_asset_eq(wland_money_of_magnus_in_chess, numeric!(0.7)); + + // `pawn#chess` is a mintable-once asset. It has a fixed global supply. + let as_bob_in_chess = BobInChess::client(); + let pawns_of_alice_in_chess = PawnsOfAliceInChess::id(); + let pawns_of_bob_in_chess = PawnsOfBobInChess::id(); + as_bob_in_chess.submit_all_blocking([ + Register::asset(Asset::new(pawns_of_alice_in_chess.clone(), Numeric::ZERO)), + Register::asset(Asset::new(pawns_of_bob_in_chess.clone(), Numeric::ZERO)), + ])?; + as_bob_in_chess.submit_blocking( + // By minting `pawn##chess@alice`, we fix the global supply. + Mint::asset_numeric(numeric!(16), pawns_of_alice_in_chess.clone()), + )?; + // No more `pawn#chess` can be minted. + [ + as_bob_in_chess.submit_blocking(Mint::asset_numeric( + numeric!(1), + pawns_of_alice_in_chess.clone(), + )), + as_bob_in_chess.submit_blocking(Mint::asset_numeric( + numeric!(1), + pawns_of_bob_in_chess.clone(), + )), + ] + .map(|r| assert!(r.is_err())); + // `alice@chess` can still burn and transfer her `pawn#chess`: + let as_alice_in_chess = AliceInChess::client(); + as_alice_in_chess.submit_blocking(Burn::asset_numeric( + numeric!(8), + pawns_of_alice_in_chess.clone(), + ))?; + as_alice_in_chess.submit_blocking(Transfer::asset_numeric( + pawns_of_alice_in_chess.clone(), + numeric!(8), + BobInChess::id(), + ))?; + as_alice_in_chess.assert_asset_eq(pawns_of_alice_in_chess, Numeric::ZERO); + as_bob_in_chess.assert_asset_eq(pawns_of_bob_in_chess, numeric!(8)); + Ok(()) +} + +trait NumericAssetExt { + fn assert_asset_eq(&self, asset_id: AssetId, expected: Numeric); +} + +impl NumericAssetExt for Client { + fn assert_asset_eq(&self, asset_id: AssetId, expected: Numeric) { + let asset = self + .query(FindAssets) + .filter_with(|asset| asset.id.eq(asset_id)) + .execute_single() + .unwrap(); + let AssetValue::Numeric(actual) = asset.value() else { + // FIXME: this API inconvenience should be resolved + // when numeric assets are separated from store assets. + panic!("should be a numeric asset"); + }; + assert_eq!(actual, &expected); + } +} diff --git a/Rust/examples/asset_store.rs b/Rust/examples/asset_store.rs new file mode 100644 index 0000000..1883ccb --- /dev/null +++ b/Rust/examples/asset_store.rs @@ -0,0 +1,113 @@ +//! Shows how to register store assets and set/remove key-value pairs. +//! +//! Depends on the `asset_definition_register` example. +//! +//! See `asset_numeric` for basic explanations on assets. + +use iroha::client::Client; +use iroha::data_model::asset::{Asset, AssetValue}; +use iroha::data_model::prelude::{ + AssetId, FindAssets, Json, Metadata, Name, QueryBuilderExt, Register, RemoveKeyValue, + SetKeyValue, +}; +use iroha_examples::{AliceInWonderland, BobInChess, BookOfBobInChess}; + +fn main() -> iroha_examples::Result<()> { + let as_alice_in_wland = AliceInWonderland::client(); + // `book##bob@chess` is a `clothes#chess` owned by `bob@chess`. + let book_of_bob_in_chess = BookOfBobInChess::id(); + // TODO: replace with NFT + as_alice_in_wland.submit_blocking( + // `book#chess` was defined by `alice@wonderland`, therefore she has to + // register a `book##bob@chess` for `bob@chess` to be able to use it. + Register::asset(Asset::new( + book_of_bob_in_chess.clone(), + Metadata::default(), + )), + )?; + let as_bob_in_chess = BobInChess::client(); + let title = "title".parse::()?; + let created_at = "created_at".parse::()?; + as_bob_in_chess.submit_all_blocking([ + // As the owner of a `book#chess`, `bob@chess` can set key-value pairs in it. + // Only the owner of a store asset and someone with a permission can + // set and remove key-value pairs – but not the asset definition owner. + // + // Keys are Iroha names, while values are arbitrary JSON strings: + SetKeyValue::asset( + book_of_bob_in_chess.clone(), + title.clone(), + "Bob's book on chess", + ), + SetKeyValue::asset( + book_of_bob_in_chess.clone(), + created_at.clone(), + serde_json::json!({"date": "2024-07-04", "time": "16:00:00Z"}), + ), + ])?; + as_bob_in_chess + .assert_metadata_eq( + book_of_bob_in_chess.clone(), + &title, + Some("Bob's book on chess"), + ) + .assert_metadata_eq( + book_of_bob_in_chess.clone(), + &created_at, + Some(serde_json::json!({"date": "2024-07-04", "time": "16:00:00Z"})), + ); + as_bob_in_chess.submit_blocking( + // A key-value pair can be re-set. + SetKeyValue::asset( + book_of_bob_in_chess.clone(), + title.clone(), + "Bob's Great Chess Encyclopedia", + ), + )?; + as_bob_in_chess.assert_metadata_eq( + book_of_bob_in_chess.clone(), + &title, + Some("Bob's Great Chess Encyclopedia"), + ); + as_bob_in_chess.submit_all_blocking([RemoveKeyValue::asset( + book_of_bob_in_chess.clone(), + created_at.clone(), + )])?; + as_bob_in_chess.assert_metadata_eq( + book_of_bob_in_chess, + &created_at, + None::, + ); + Ok(()) +} + +trait StoreAssetExt { + fn assert_metadata_eq>( + &self, + asset_id: AssetId, + key: &Name, + expected_value: Option, + ) -> &Self; +} + +impl StoreAssetExt for Client { + fn assert_metadata_eq>( + &self, + asset_id: AssetId, + key: &Name, + expected_value: Option, + ) -> &Self { + let asset = self + .query(FindAssets) + .filter_with(|asset| asset.id.eq(asset_id)) + .execute_single() + .unwrap(); + let AssetValue::Store(actual) = asset.value() else { + // FIXME: this API inconvenience should be resolved + // when numeric assets are separated from store assets. + panic!("should be a numeric asset"); + }; + assert_eq!(actual.get(key), expected_value.map(Into::into).as_ref()); + self + } +} diff --git a/Rust/examples/client_account_definition.rs b/Rust/examples/client_account_definition.rs deleted file mode 100644 index abb4fc8..0000000 --- a/Rust/examples/client_account_definition.rs +++ /dev/null @@ -1,27 +0,0 @@ -use eyre::Error; - -fn main() { - account_definition_test().expect("Account definition example is expected to work correctly"); - - println!("Account definition example works!"); -} - -fn account_definition_test() -> Result<(), Error> { - // #region account_definition_comparison - use iroha_data_model::prelude::AccountId; - - // Create an `iroha_data_model::AccountId` instance - // with a DomainId instance and a Domain ID for an account - let longhand_account_id = AccountId::new("white_rabbit".parse()?, "looking_glass".parse()?); - let account_id: AccountId = "white_rabbit@looking_glass" - .parse() - .expect("Valid, because the string contains no whitespace, has a single '@' character and is not empty after"); - - // Check that two ways to define an account match - assert_eq!(account_id, longhand_account_id); - - // #endregion account_definition_comparison - - // Finish the test successfully - Ok(()) -} diff --git a/Rust/examples/client_account_registration.rs b/Rust/examples/client_account_registration.rs deleted file mode 100644 index 4d0ca21..0000000 --- a/Rust/examples/client_account_registration.rs +++ /dev/null @@ -1,85 +0,0 @@ -use eyre::{Error, WrapErr}; -use iroha_config::client::Configuration; -use std::fs::File; - -fn main() { - let config = load_configuration().expect("Configuration should be loading normally"); - account_registration_test(&config) - .expect("Account registration example is expected to work correctly"); - println!("Account registration example works!"); -} - -fn load_configuration() -> Result { - // #region rust_config_load - let config_loc = "./config.json"; - let file = File::open(config_loc) - .wrap_err(format!( - "Unable to load the configuration file at `{}`", - config_loc - )) - .expect("Config file is loading normally."); - let config: Configuration = serde_json::from_reader(file) - .wrap_err(format!("Failed to parse `{}`", config_loc)) - .expect("Verified in tests"); - // #endregion rust_config_load - - // Return the configuration normally - Ok(config) -} - -// This function imitates the user sharing a public key. -// It generates a new public key for a new account. -// Normally, it is generated by Kagami. -fn get_key_from_white_rabbit() -> iroha_crypto::PublicKey { - use iroha_crypto::KeyPair; - - let (public_key, _) = KeyPair::generate() - .expect("Failed to generate KeyPair") - .into(); - - public_key -} - -fn account_registration_test(config: &Configuration) -> Result<(), Error> { - // #region register_account_crates - use iroha_client::client::Client; - use iroha_data_model::{ - metadata::UnlimitedMetadata, - prelude::{Account, AccountId, InstructionBox, RegisterBox}, - }; - // #endregion register_account_crates - - // Create an Iroha client - let iroha_client: Client = Client::new(&config)?; - - // #region register_account_create - // Create an AccountId instance by providing the account and domain name - let account_id: AccountId = "white_rabbit@looking_glass" - .parse() - .expect("Valid, because the string contains no whitespace, has a single '@' character and is not empty after"); - // #endregion register_account_create - - // Use a public key that was shared by the white_rabbit. - let public_key = get_key_from_white_rabbit(); - - // #region register_account_generate - // Generate a new account - let create_account = RegisterBox::new(Account::new(account_id, [public_key])); - // #endregion register_account_generate - - // #region register_account_prepare_tx - // Prepare a transaction using the - // Account's RegisterBox - let metadata = UnlimitedMetadata::new(); - let instructions: Vec = vec![create_account.into()]; - let tx = iroha_client.build_transaction(instructions, metadata)?; - // #endregion register_account_prepare_tx - - // #region register_account_submit_tx - // Submit a prepared account registration transaction - iroha_client.submit_transaction(&tx)?; - // #endregion register_account_submit_tx - - // Finish the test successfully - Ok(()) -} diff --git a/Rust/examples/client_asset_burning.rs b/Rust/examples/client_asset_burning.rs deleted file mode 100644 index 050d0a3..0000000 --- a/Rust/examples/client_asset_burning.rs +++ /dev/null @@ -1,86 +0,0 @@ -use eyre::{Error, WrapErr}; -use iroha_config::client::Configuration; -use std::fs::File; - -fn main() { - let config = load_configuration().expect("Configuration should be loading normally"); - asset_burning_test(&config).expect("Asset burning example is expected to work correctly"); - - println!("Asset burning example works!"); -} - -fn load_configuration() -> Result { - // #region rust_config_load - let config_loc = "./config.json"; - let file = File::open(config_loc) - .wrap_err(format!( - "Unable to load the configuration file at `{}`", - config_loc - )) - .expect("Config file is loading normally."); - let config: Configuration = serde_json::from_reader(file) - .wrap_err(format!("Failed to parse `{}`", config_loc)) - .expect("Verified in tests"); - // #endregion rust_config_load - - // Return the configuration normally - Ok(config) -} - -fn asset_burning_test(config: &Configuration) -> Result<(), Error> { - // #region burn_asset_crates - use std::str::FromStr; - - use iroha_client::client::Client; - use iroha_data_model::{ - prelude::{AccountId, AssetDefinitionId, AssetId, BurnBox, ToValue}, - IdBox, - }; - // #endregion burn_asset_crates - - // Create an Iroha client - let iroha_client: Client = Client::new(&config)?; - - // #region burn_asset_define_asset_account - // Define the instances of an Asset and Account - let roses = AssetDefinitionId::from_str("rose#wonderland") - .expect("Valid, because the string contains no whitespace, has a single '#' character and is not empty after"); - let alice: AccountId = "alice@wonderland".parse() - .expect("Valid, because the string contains no whitespace, has a single '@' character and is not empty after"); - // #endregion burn_asset_define_asset_account - - // #region burn_asset_burn - // Burn the Asset instance - let burn_roses = BurnBox::new( - 10_u32.to_value(), - IdBox::AssetId(AssetId::new(roses, alice)), - ); - // #endregion burn_asset_burn - - // #region burn_asset_submit_tx - iroha_client - .submit(burn_roses) - .wrap_err("Failed to submit transaction")?; - // #endregion burn_asset_submit_tx - - // #region burn_asset_burn_alt - // Burn the Asset instance (alternate syntax). - // The syntax is `asset_name#asset_domain#account_name@account_domain`, - // or `roses.to_string() + "#" + alice.to_string()`. - // The `##` is a short-hand for the rose `which belongs to the same domain as the account - // to which it belongs to. - let burn_roses_alt = BurnBox::new( - 10_u32.to_value(), - IdBox::AssetId("rose##alice@wonderland".parse()?), - ); - // #endregion burn_asset_burn_alt - - // #region burn_asset_submit_tx_alt - iroha_client - .submit(burn_roses_alt) - .wrap_err("Failed to submit transaction")?; - // #endregion burn_asset_submit_tx_alt - - // Finish the test successfully - Ok(()) -} diff --git a/Rust/examples/client_asset_minting.rs b/Rust/examples/client_asset_minting.rs deleted file mode 100644 index ac26fcc..0000000 --- a/Rust/examples/client_asset_minting.rs +++ /dev/null @@ -1,86 +0,0 @@ -use eyre::{Error, WrapErr}; -use iroha_config::client::Configuration; -use std::fs::File; - -fn main() { - let config = load_configuration().expect("Configuration should be loading normally"); - asset_minting_test(&config).expect("Asset minting example is expected to work correctly"); - - println!("Asset minting example works!"); -} - -fn load_configuration() -> Result { - // #region rust_config_load - let config_loc = "./config.json"; - let file = File::open(config_loc) - .wrap_err(format!( - "Unable to load the configuration file at `{}`", - config_loc - )) - .expect("Config file is loading normally."); - let config: Configuration = serde_json::from_reader(file) - .wrap_err(format!("Failed to parse `{}`", config_loc)) - .expect("Verified in tests"); - // #endregion rust_config_load - - // Return the configuration normally - Ok(config) -} - -fn asset_minting_test(config: &Configuration) -> Result<(), Error> { - // #region mint_asset_crates - use std::str::FromStr; - - use iroha_client::client::Client; - use iroha_data_model::{ - prelude::{AccountId, AssetDefinitionId, AssetId, MintBox, ToValue}, - IdBox, - }; - // #endregion mint_asset_crates - - // Create an Iroha client - let iroha_client: Client = Client::new(&config)?; - - // Define the instances of an Asset and Account - // #region mint_asset_define_asset_account - let roses = AssetDefinitionId::from_str("rose#wonderland") - .expect("Valid, because the string contains no whitespace, has a single '#' character and is not empty after"); - let alice: AccountId = "alice@wonderland".parse() - .expect("Valid, because the string contains no whitespace, has a single '@' character and is not empty after"); - // #endregion mint_asset_define_asset_account - - // Mint the Asset instance - // #region mint_asset_mint - let mint_roses = MintBox::new( - 42_u32.to_value(), - IdBox::AssetId(AssetId::new(roses, alice)), - ); - // #endregion mint_asset_mint - - // #region mint_asset_submit_tx - iroha_client - .submit(mint_roses) - .wrap_err("Failed to submit transaction")?; - // #endregion mint_asset_submit_tx - - // #region mint_asset_mint_alt - // Mint the Asset instance (alternate syntax). - // The syntax is `asset_name#asset_domain#account_name@account_domain`, - // or `roses.to_string() + "#" + alice.to_string()`. - // The `##` is a short-hand for the rose `which belongs to the same domain as the account - // to which it belongs to. - let mint_roses_alt = MintBox::new( - 10_u32.to_value(), - IdBox::AssetId("rose##alice@wonderland".parse()?), - ); - // #endregion mint_asset_mint_alt - - // #region mint_asset_submit_tx_alt - iroha_client - .submit(mint_roses_alt) - .wrap_err("Failed to submit transaction")?; - // #endregion mint_asset_submit_tx_alt - - // Finish the test successfully - Ok(()) -} diff --git a/Rust/examples/client_asset_registration.rs b/Rust/examples/client_asset_registration.rs deleted file mode 100644 index a0dca73..0000000 --- a/Rust/examples/client_asset_registration.rs +++ /dev/null @@ -1,78 +0,0 @@ -use eyre::{Error, WrapErr}; -use iroha_config::client::Configuration; -use iroha_data_model::TryToValue; -use std::fs::File; - -fn main() { - let config = load_configuration().expect("Configuration should be loading normally"); - asset_registration_test(&config) - .expect("Asset registration example is expected to work correctly"); - - println!("Asset registration example works!"); -} - -fn load_configuration() -> Result { - // #region rust_config_load - let config_loc = "./config.json"; - let file = File::open(config_loc) - .wrap_err(format!( - "Unable to load the configuration file at `{}`", - config_loc - )) - .expect("Config file is loading normally."); - let config: Configuration = serde_json::from_reader(file) - .wrap_err(format!("Failed to parse `{}`", config_loc)) - .expect("Verified in tests"); - // #endregion rust_config_load - - // Return the configuration normally - Ok(config) -} - -fn asset_registration_test(config: &Configuration) -> Result<(), Error> { - // #region register_asset_crates - use std::str::FromStr as _; - - use iroha_client::client::Client; - use iroha_data_model::prelude::{ - AccountId, AssetDefinition, AssetDefinitionId, AssetId, IdBox, MintBox, RegisterBox, - }; - // #endregion register_asset_crates - - // Create an Iroha client - let iroha_client: Client = Client::new(&config)?; - - // #region register_asset_create_asset - // Create an asset - let asset_def_id = AssetDefinitionId::from_str("time#looking_glass") - .expect("Valid, because the string contains no whitespace, has a single '#' character and is not empty after"); - // #endregion register_asset_create_asset - - // #region register_asset_init_submit - // Initialise the registration time - let register_time = - RegisterBox::new(AssetDefinition::fixed(asset_def_id.clone()).mintable_once()); - - // Submit a registration time - iroha_client.submit(register_time)?; - // #endregion register_asset_init_submit - - // Create an account using the previously defined asset - let account_id: AccountId = "white_rabbit@looking_glass" - .parse() - .expect("Valid, because the string contains no whitespace, has a single '@' character and is not empty after"); - - // #region register_asset_mint_submit - // Create a MintBox using a previous asset and account - let mint = MintBox::new( - 12.34_f64.try_to_value()?, - IdBox::AssetId(AssetId::new(asset_def_id, account_id)), - ); - - // Submit a minting transaction - iroha_client.submit_all([mint])?; - // #endregion register_asset_mint_submit - - // Finish the test successfully - Ok(()) -} diff --git a/Rust/examples/client_domain_registration.rs b/Rust/examples/client_domain_registration.rs deleted file mode 100644 index 75a2b2a..0000000 --- a/Rust/examples/client_domain_registration.rs +++ /dev/null @@ -1,73 +0,0 @@ -use eyre::{Error, WrapErr}; -use iroha_config::client::Configuration; -use std::fs::File; - -fn main() { - let config = load_configuration().expect("Configuration should be loading normally"); - domain_registration_test(&config) - .expect("Domain registration example is expected to work correctly"); - - println!("Domain registration example works!"); -} - -fn load_configuration() -> Result { - // #region rust_config_load - let config_loc = "./config.json"; - let file = File::open(config_loc) - .wrap_err(format!( - "Unable to load the configuration file at `{}`", - config_loc - )) - .expect("Config file is loading normally."); - let config: Configuration = serde_json::from_reader(file) - .wrap_err(format!("Failed to parse `{}`", config_loc)) - .expect("Verified in tests"); - // #endregion rust_config_load - - // Return the configuration normally - Ok(config) -} - -fn domain_registration_test(config: &Configuration) -> Result<(), Error> { - // #region domain_register_example_crates - use iroha_client::client::Client; - use iroha_data_model::{ - metadata::UnlimitedMetadata, - prelude::{Domain, DomainId, InstructionBox, RegisterBox}, - }; - // #endregion domain_register_example_crates - - // #region domain_register_example_create_domain - // Create a domain Id - let looking_glass: DomainId = "looking_glass".parse()?; - // #endregion domain_register_example_create_domain - - // #region domain_register_example_create_isi - // Create an ISI - let create_looking_glass = RegisterBox::new(Domain::new(looking_glass)); - // #endregion domain_register_example_create_isi - - // #region rust_client_create - // Create an Iroha client - let iroha_client: Client = Client::new(&config)?; - // #endregion rust_client_create - - // #region domain_register_example_prepare_tx - // Prepare a transaction - let metadata = UnlimitedMetadata::default(); - let instructions: Vec = vec![create_looking_glass.into()]; - let tx = iroha_client - .build_transaction(instructions, metadata) - .wrap_err("Error building a domain registration transaction")?; - // #endregion domain_register_example_prepare_tx - - // #region domain_register_example_submit_tx - // Submit a prepared domain registration transaction - iroha_client - .submit_transaction(&tx) - .wrap_err("Failed to submit transaction")?; - // #endregion domain_register_example_submit_tx - - // Finish the test successfully - Ok(()) -} diff --git a/Rust/examples/client_json_config.rs b/Rust/examples/client_json_config.rs deleted file mode 100644 index 76c3104..0000000 --- a/Rust/examples/client_json_config.rs +++ /dev/null @@ -1,38 +0,0 @@ -use eyre::{Error, WrapErr}; -use iroha_config::client::Configuration; -use std::fs::File; - -fn main() { - let config = load_configuration().expect("Configuration should be loading normally"); - json_config_client_test(&config) - .expect("JSON config client example is expected to work correctly"); - - println!("JSON client configuration test passed successfully!"); -} - -fn load_configuration() -> Result { - // #region rust_config_load - let config_loc = "./config.json"; - let file = File::open(config_loc) - .wrap_err(format!( - "Unable to load the configuration file at `{}`", - config_loc - )) - .expect("Config file is loading normally."); - let config: Configuration = serde_json::from_reader(file) - .wrap_err(format!("Failed to parse `{}`", config_loc)) - .expect("Verified in tests"); - // #endregion rust_config_load - - // Return the configuration normally - Ok(config) -} - -fn json_config_client_test(config: &Configuration) -> Result<(), Error> { - use iroha_client::client::Client; - - // Initialise a client with a provided config - let _current_client: Client = Client::new(&config)?; - - Ok(()) -} diff --git a/Rust/examples/domain_register.rs b/Rust/examples/domain_register.rs new file mode 100644 index 0000000..97448cb --- /dev/null +++ b/Rust/examples/domain_register.rs @@ -0,0 +1,23 @@ +//! Shows how to register a domain. + +use iroha::data_model::prelude::{Domain, FindDomains, QueryBuilderExt, Register}; + +use iroha_examples::{AliceInWonderland, Chess, ExampleDomain}; + +fn main() -> iroha_examples::Result<()> { + let as_alice_in_wland = AliceInWonderland::client(); + let chess = Chess::id(); + let register_chess = Register::domain(Domain::new(chess.clone())); + as_alice_in_wland.submit_blocking(register_chess)?; + let chess = as_alice_in_wland + .query(FindDomains) + .filter_with(|domain| domain.id.eq(chess)) + .execute_single()?; + println!( + "Domain: {}\nRegistered by: {}", + chess, as_alice_in_wland.account + ); + // Domain: chess + // Registered by: ed01...03@wonderland + Ok(()) +} diff --git a/Rust/examples/domain_transfer.rs b/Rust/examples/domain_transfer.rs new file mode 100644 index 0000000..4829d88 --- /dev/null +++ b/Rust/examples/domain_transfer.rs @@ -0,0 +1,68 @@ +//! Shows how to transfer ownership of a domain between accounts. +//! +//! Depends on the `domain_register` example. + +use iroha::client::Client; +use iroha::data_model::prelude::{ + AccountId, DomainId, FindDomains, Identifiable, QueryBuilderExt, Transfer, +}; + +use iroha_examples::{AliceInWonderland, BobInWonderland, ExampleDomain, Wonderland}; + +fn main() -> iroha_examples::Result<()> { + let chess = Wonderland::id(); + let alice_in_wland = AliceInWonderland::id(); + let bob_in_wland = BobInWonderland::id(); + // Transfer Chess from Alice in Wonderland to Bob in Wonderland. + transfer( + &AliceInWonderland::client(), + chess.clone(), + alice_in_wland.clone(), + bob_in_wland.clone(), + )?; + // Transfer Chess back from Bob in Wonderland to Alice in Wonderland. + transfer( + &BobInWonderland::client(), + chess, + bob_in_wland, + alice_in_wland, + )?; + Ok(()) +} + +fn transfer( + as_who: &Client, + domain: DomainId, + from: AccountId, + to: AccountId, +) -> iroha_examples::Result<()> { + { + // Observe that the old owner owns the domain. + let domain = as_who + .query(FindDomains) + .filter_with(|dom| dom.id.eq(domain.clone())) + .execute_single()?; + assert_eq!(domain.owned_by(), &from); + } + let transfer_domain = Transfer::domain(from.clone(), domain.clone(), to.clone()); + as_who.submit_blocking(transfer_domain)?; + // Observe that now the new owner owns the domain. + let domain = as_who + .query(FindDomains) + .filter_with(|dom| dom.id.eq(domain.clone())) + .execute_single()?; + assert_eq!(domain.owned_by(), &to); + println!( + "Domain: {}\nTransferred\n\tfrom: {}\n\tto: {}\nby: {}", + domain.id(), + from, + to, + as_who.account + ); + // Domain: chess + // Transferred + // from: ed01...03@wonderland + // to: ed01...16@wonderland + // by: ed01...03@wonderland + Ok(()) +} diff --git a/Rust/examples/domain_unregister.rs b/Rust/examples/domain_unregister.rs new file mode 100644 index 0000000..60f0dc1 --- /dev/null +++ b/Rust/examples/domain_unregister.rs @@ -0,0 +1,26 @@ +//! Shows how to unregister a domain. +//! +//! Depends on the `domain_register` example. + +use iroha::data_model::prelude::{FindDomains, QueryBuilderExt, Unregister}; + +use iroha_examples::{AliceInWonderland, Chess, ExampleDomain}; + +fn main() -> iroha_examples::Result<()> { + let as_alice_in_wland = AliceInWonderland::client(); + let chess = Chess::id(); + let unregister_chess = Unregister::domain(chess.clone()); + as_alice_in_wland.submit_blocking(unregister_chess)?; + as_alice_in_wland + .query(FindDomains) + .filter_with(|dom| dom.id.eq(chess.clone())) + .execute_single() + .expect_err("domain should not be found"); + println!( + "Domain: {}\nUnregistered by: {}", + chess, as_alice_in_wland.account + ); + // Domain: chess + // Unregistered by: ed01...03@wonderland + Ok(()) +} diff --git a/Rust/examples/metadata.rs b/Rust/examples/metadata.rs new file mode 100644 index 0000000..ba622be --- /dev/null +++ b/Rust/examples/metadata.rs @@ -0,0 +1,40 @@ +//! Shows how to work with metadata. + +use iroha::data_model::prelude::{FindAccountMetadata, Name, RemoveKeyValue, SetKeyValue}; +use iroha_examples::AliceInWonderland; + +fn main() -> iroha_examples::Result<()> { + let alice_in_wland = AliceInWonderland::id(); + let as_alice_in_wland = AliceInWonderland::client(); + let key = "key".parse::()?; + let value = as_alice_in_wland + .query_single(FindAccountMetadata::new( + alice_in_wland.clone(), + key.clone(), + )) + .ok(); + println!("metadata[{key}] of alice@wonderland: {value:?}"); + + as_alice_in_wland.submit_blocking(SetKeyValue::account( + alice_in_wland.clone(), + key.clone(), + "new_value", + ))?; + + let new_value = as_alice_in_wland.query_single(FindAccountMetadata::new( + alice_in_wland.clone(), + key.clone(), + ))?; + println!("metadata[{key}] of alice@wonderland: {new_value:?}"); + + as_alice_in_wland + .submit_blocking(RemoveKeyValue::account(alice_in_wland.clone(), key.clone()))?; + + as_alice_in_wland + .query_single(FindAccountMetadata::new( + alice_in_wland.clone(), + key.clone(), + )) + .expect_err("key-value should be removed"); + Ok(()) +} diff --git a/Rust/examples/million_accounts_genesis.rs b/Rust/examples/million_accounts_genesis.rs deleted file mode 100644 index 374e1b1..0000000 --- a/Rust/examples/million_accounts_genesis.rs +++ /dev/null @@ -1,85 +0,0 @@ -use std::{thread, time::Duration}; - -use iroha::samples::{construct_validator, get_config}; -use iroha_data_model::prelude::*; -use iroha_genesis::{GenesisNetwork, RawGenesisBlock, RawGenesisBlockBuilder}; -use test_network::{ - get_key_pair, wait_for_genesis_committed, Peer as TestPeer, PeerBuilder, TestRuntime, -}; -use tokio::runtime::Runtime; - -fn generate_genesis(num_domains: u32) -> RawGenesisBlock { - let mut builder = RawGenesisBlockBuilder::new(); - - let key_pair = get_key_pair(); - for i in 0_u32..num_domains { - builder = builder - .domain(format!("wonderland-{i}").parse().expect("Valid")) - .account( - format!("Alice-{i}").parse().expect("Valid"), - key_pair.public_key().clone(), - ) - .asset( - format!("xor-{i}").parse().expect("Valid"), - AssetValueType::Quantity, - ) - .finish_domain(); - } - - builder - .validator( - construct_validator("../default_validator").expect("Failed to construct validator"), - ) - .build() -} - -fn main_genesis() { - let mut peer = ::new().expect("Failed to create peer"); - let configuration = get_config( - std::iter::once(peer.id.clone()).collect(), - Some(get_key_pair()), - ); - let rt = Runtime::test(); - let genesis = GenesisNetwork::from_configuration( - generate_genesis(1_000_000_u32), - Some(&configuration.genesis), - ) - .expect("genesis creation failed"); - - let builder = PeerBuilder::new() - .with_into_genesis(genesis) - .with_configuration(configuration); - - // This only submits the genesis. It doesn't check if the accounts - // are created, because that check is 1) not needed for what the - // test is actually for, 2) incredibly slow, making this sort of - // test impractical, 3) very likely to overflow memory on systems - // with less than 16GiB of free memory. - rt.block_on(builder.start_with_peer(&mut peer)); -} - -fn create_million_accounts_directly() { - let (_rt, _peer, test_client) = ::new().start_with_runtime(); - wait_for_genesis_committed(&vec![test_client.clone()], 0); - for i in 0_u32..1_000_000_u32 { - let domain_id: DomainId = format!("wonderland-{i}").parse().expect("Valid"); - let normal_account_id = AccountId::new( - format!("bob-{i}").parse().expect("Valid"), - domain_id.clone(), - ); - let create_domain = RegisterBox::new(Domain::new(domain_id)); - let create_account = RegisterBox::new(Account::new(normal_account_id.clone(), [])); - if test_client - .submit_all([create_domain, create_account]) - .is_err() - { - thread::sleep(Duration::from_millis(100)); - } - } - thread::sleep(Duration::from_secs(1000)); -} - -fn main() { - create_million_accounts_directly(); - main_genesis(); -} diff --git a/Rust/examples/roles.rs b/Rust/examples/roles.rs new file mode 100644 index 0000000..b1c0cad --- /dev/null +++ b/Rust/examples/roles.rs @@ -0,0 +1,55 @@ +//! Shows how to work with permissions and roles. + +use iroha::data_model::prelude::*; +use iroha_examples::*; +use iroha_executor_data_model::permission::asset_definition::CanRegisterAssetDefinition; +use iroha_executor_data_model::permission::domain::*; + +fn main() -> Result<()> { + let chess = Chess::id(); + let bob_in_chess = BobInChess::id(); + + // define a role for managing chess + let chess_manager: RoleId = "CHESS_MANAGER".parse()?; + let new_chess_manager = Role::new(chess_manager.clone(), bob_in_chess.clone()).add_permission( + CanModifyDomainMetadata { + domain: chess.clone(), + }, + ); + + // grant the role to bob@chess + let as_alice_in_wland = AliceInWonderland::client(); + as_alice_in_wland.submit_all_blocking::([ + Register::role(new_chess_manager).into(), + Grant::account_role(chess_manager.clone(), bob_in_chess.clone()).into(), + ])?; + + // bob@chess is now able to set key-values in chess + let as_bob_in_chess = BobInChess::client(); + let key = "bob_key".parse::()?; + as_bob_in_chess.submit_all_blocking::([ + SetKeyValue::domain(chess.clone(), key.clone(), "bob_value").into(), + RemoveKeyValue::domain(chess.clone(), key).into(), + ])?; + + // add permissions to an existing role + as_alice_in_wland.submit_all_blocking([Grant::role_permission( + CanRegisterAssetDefinition { + domain: chess.clone(), + }, + chess_manager.clone(), + )])?; + + // bob@chess is now able to do more in chess + let as_bob_in_chess = BobInChess::client(); + let chess_pawns = ChessPawns::id(); + let new_chess_pawns = AssetDefinition::numeric(chess_pawns.clone()); + as_bob_in_chess.submit_blocking(Register::asset_definition(new_chess_pawns))?; + as_bob_in_chess.submit_blocking(Unregister::asset_definition(chess_pawns))?; + + // revoke the role from bob@chess + as_alice_in_wland.submit_blocking(Revoke::account_role(chess_manager.clone(), bob_in_chess))?; + // remove the role + as_alice_in_wland.submit_blocking(Unregister::role(chess_manager))?; + Ok(()) +} diff --git a/Rust/examples/status.rs b/Rust/examples/status.rs new file mode 100644 index 0000000..e320aa4 --- /dev/null +++ b/Rust/examples/status.rs @@ -0,0 +1,19 @@ +//! Shows how to check the status of the blockchain. + +use iroha_examples::AliceInWonderland; + +fn main() -> iroha_examples::Result<()> { + let as_alice_in_wonderland = AliceInWonderland::client(); + let status = as_alice_in_wonderland.get_status()?; + println!("{status:#?}"); + // Status { + // peers: 3, + // blocks: 15, + // txs_accepted: 18, + // txs_rejected: 0, + // uptime: Uptime(534.26s), + // view_changes: 0, + // queue_size: 0, + // } + Ok(()) +} diff --git a/Rust/examples/transaction.rs b/Rust/examples/transaction.rs new file mode 100644 index 0000000..aa1fcf6 --- /dev/null +++ b/Rust/examples/transaction.rs @@ -0,0 +1,31 @@ +//! Shows how to work directly with transactions. + +use iroha::data_model::prelude::{Metadata, Mint}; +use iroha_examples::{AliceInWonderland, RosesOfAliceInWonderland}; + +fn main() -> iroha_examples::Result<()> { + // Prepare the instructions you want to execute + let roses_of_alice_in_wland = RosesOfAliceInWonderland::id(); + let mint_roses_of_alice_in_wland = Mint::asset_numeric(1_u32, roses_of_alice_in_wland); + + // Combine the instructions + let instructions = [ + mint_roses_of_alice_in_wland.clone(), + mint_roses_of_alice_in_wland, + ]; + + // Build a transaction with the prepared instructions and empty metadata + // on behalf of the account configured with the client + let as_alice_in_wland = AliceInWonderland::client(); + let signed_tx = as_alice_in_wland.build_transaction(instructions, Metadata::default()); + + let _tx_hash_1 = as_alice_in_wland.submit_transaction(&signed_tx)?; + + // Transaction 1 may or may not have been committed or rejected. + // If you want synchronous behavior, use the _blocking variant: + + let _tx_hash_2 = as_alice_in_wland.submit_transaction_blocking(&signed_tx)?; + + // If this line has been reached, Transaction 2 has been committed. + Ok(()) +} diff --git a/Rust/examples/trigger_call.rs b/Rust/examples/trigger_call.rs new file mode 100644 index 0000000..8d78c55 --- /dev/null +++ b/Rust/examples/trigger_call.rs @@ -0,0 +1,51 @@ +//! Demonstrates how to execute triggers directly. + +use iroha::data_model::prelude::*; +use iroha_examples::AliceInWonderland; + +fn main() -> iroha_examples::Result<()> { + // Establish a connection as Alice from Wonderland + let alice_in_wland = AliceInWonderland::id(); + let as_alice_in_wland = AliceInWonderland::client(); + + // The instruction to be executed when the trigger fires: minting an asset + let wland_roses = "rose#wonderland".parse::()?; + let wland_roses_of_alice = AssetId::new(wland_roses, alice_in_wland.clone()); + let mint_wland_roses_of_alice = Mint::asset_numeric(1_u32, wland_roses_of_alice.clone()); + + // Create a trigger reacting to data events: + let trigger_id: TriggerId = "mint_wland_roses_of_alice_on_execute".parse()?; + let trigger = Trigger::new( + trigger_id.clone(), + Action::new( + Some(mint_wland_roses_of_alice), + Repeats::Indefinitely, + alice_in_wland.clone(), + ExecuteTriggerEventFilter::new() + .for_trigger(trigger_id.clone()) + .under_authority(alice_in_wland), + ), + ); + + // Register the trigger on the blockchain + as_alice_in_wland.submit_blocking(Register::trigger(trigger))?; + + // Query Alice's Wonderland roses before: + println!( + "Alice's Wonderland Rose count before trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Execute the trigger via an instruction. + as_alice_in_wland.submit_blocking(ExecuteTrigger::new(trigger_id.clone()))?; + + // Query Alice's Wonderland roses after: + println!( + "Alice's Wonderland Rose count after trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Unregister the trigger. + as_alice_in_wland.submit_blocking(Unregister::trigger(trigger_id))?; + Ok(()) +} diff --git a/Rust/examples/trigger_data.rs b/Rust/examples/trigger_data.rs new file mode 100644 index 0000000..591cc63 --- /dev/null +++ b/Rust/examples/trigger_data.rs @@ -0,0 +1,57 @@ +//! Demonstrates how to register a trigger that responds to a data event. + +use iroha::data_model::prelude::*; +use iroha_examples::{AliceInWonderland, ExampleDomain, Wonderland}; + +fn main() -> iroha_examples::Result<()> { + // Establish a connection as Alice from Wonderland + let alice_in_wland = AliceInWonderland::id(); + let as_alice_in_wland = AliceInWonderland::client(); + + // The instruction to be executed when the trigger fires: minting an asset + let wland_roses = "rose#wonderland".parse::()?; + let wland_roses_of_alice = AssetId::new(wland_roses, alice_in_wland.clone()); + let mint_wland_roses_of_alice = Mint::asset_numeric(1_u32, wland_roses_of_alice.clone()); + + // Create a trigger reacting to domain metadata edits: + let trigger_id: TriggerId = "mint_wland_roses_of_alice_on_asset_mint".parse()?; + let trigger = Trigger::new( + trigger_id.clone(), + Action::new( + Some(mint_wland_roses_of_alice), + Repeats::Indefinitely, + alice_in_wland, + DataEventFilter::Domain( + DomainEventFilter::new().for_events(DomainEventSet::MetadataInserted), + ), + ), + ); + + // Register the trigger on the blockchain + as_alice_in_wland.submit_blocking(Register::trigger(trigger))?; + + // Query Alice's Wonderland roses before: + println!( + "Alice's Wonderland Rose count before trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Trigger is now registered and will mint a rose + // every time any domain gets a new key-value pair in its metadata. + as_alice_in_wland.submit_blocking(SetKeyValue::domain( + // any domain + Wonderland::id(), + "any_key".parse()?, + "any_value", + ))?; + + // Query Alice's Wonderland roses after: + println!( + "Alice's Wonderland Rose count after trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Unregister the trigger. + as_alice_in_wland.submit_blocking(Unregister::trigger(trigger_id))?; + Ok(()) +} diff --git a/Rust/examples/trigger_pre_commit.rs b/Rust/examples/trigger_pre_commit.rs new file mode 100644 index 0000000..447bfcd --- /dev/null +++ b/Rust/examples/trigger_pre_commit.rs @@ -0,0 +1,51 @@ +//! Demonstrates how to register a trigger that executes before block commit. + +use iroha::data_model::prelude::*; +use iroha::data_model::Level; +use iroha_examples::AliceInWonderland; + +fn main() -> iroha_examples::Result<()> { + // Establish a connection as Alice from Wonderland + let alice_in_wland = AliceInWonderland::id(); + let as_alice_in_wland = AliceInWonderland::client(); + + // The instruction to be executed when the trigger fires: minting an asset + let wland_roses = "rose#wonderland".parse::()?; + let wland_roses_of_alice = AssetId::new(wland_roses, alice_in_wland.clone()); + let mint_wland_roses_of_alice = Mint::asset_numeric(1_u32, wland_roses_of_alice.clone()); + + // Create a time-based trigger with pre-commit execution time + let trigger_id: TriggerId = "mint_wland_roses_of_alice_before_commit".parse()?; + let trigger = Trigger::new( + trigger_id.clone(), + Action::new( + Some(mint_wland_roses_of_alice), + Repeats::Indefinitely, + alice_in_wland, + TimeEventFilter::new(ExecutionTime::PreCommit), + ), + ); + + // Register the trigger on the blockchain + as_alice_in_wland.submit_blocking(Register::trigger(trigger))?; + // Trigger is now registered and will mint a rose before every commit + + // Query Alice's Wonderland roses before: + println!( + "Alice's Wonderland Rose count before trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Issue a dummy instruction to create a block. + as_alice_in_wland.submit_blocking(Log::new(Level::DEBUG, "Dummy".to_owned()))?; + + // Query Alice's Wonderland roses after: + println!( + "Alice's Wonderland Rose count after trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Unregister the trigger. + as_alice_in_wland.submit_blocking(Unregister::trigger(trigger_id))?; + Ok(()) +} diff --git a/Rust/examples/trigger_time.rs b/Rust/examples/trigger_time.rs new file mode 100644 index 0000000..bce63db --- /dev/null +++ b/Rust/examples/trigger_time.rs @@ -0,0 +1,60 @@ +//! Demonstrates how to register a trigger that responds to a time event. + +use iroha::data_model::prelude::*; +use iroha::data_model::Level; +use iroha_examples::AliceInWonderland; +use std::time::{Duration, SystemTime}; + +fn main() -> iroha_examples::Result<()> { + // Establish a connection as Alice from Wonderland + let alice_in_wland = AliceInWonderland::id(); + let as_alice_in_wland = AliceInWonderland::client(); + + // Construct the trigger schedule start time. We add three seconds + let start_time = + SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)? + Duration::from_secs(3); + + // Define a schedule for the trigger, starting now and repeating every second + let every_second = TimeSchedule::starting_at(start_time).with_period(Duration::from_secs(1)); + + // The instruction to be executed when the trigger fires: minting an asset + let wland_roses = "rose#wonderland".parse::()?; + let wland_roses_of_alice = AssetId::new(wland_roses, alice_in_wland.clone()); + let mint_wland_roses_of_alice = Mint::asset_numeric(1_u32, wland_roses_of_alice.clone()); + + // Create a time-based trigger with the defined schedule + let trigger_id: TriggerId = "mint_wland_roses_of_alice_every_second".parse()?; + let trigger = Trigger::new( + trigger_id.clone(), + Action::new( + Some(mint_wland_roses_of_alice), + Repeats::Indefinitely, + alice_in_wland, + TimeEventFilter::new(ExecutionTime::Schedule(every_second)), + ), + ); + + // Register the trigger on the blockchain + as_alice_in_wland.submit_blocking(Register::trigger(trigger))?; + // Trigger is now registered and will mint a rose every second + + // Query Alice's Wonderland roses before: + println!( + "Alice's Wonderland Rose count before trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Sleep for a few seconds to allow the trigger to mint multiple roses + std::thread::sleep(Duration::from_secs(5)); + as_alice_in_wland.submit_blocking(Log::new(Level::DEBUG, "Dummy".to_owned()))?; + + // Query Alice's Wonderland roses after: + println!( + "Alice's Wonderland Rose count after trigger execution: {}", + as_alice_in_wland.query_single(FindAssetQuantityById::new(wland_roses_of_alice.clone()))? + ); + + // Unregister the trigger. + as_alice_in_wland.submit_blocking(Unregister::trigger(trigger_id))?; + Ok(()) +} diff --git a/Rust/examples/tutorial-3-register-domain.rs b/Rust/examples/tutorial-3-register-domain.rs deleted file mode 100644 index ca11e2f..0000000 --- a/Rust/examples/tutorial-3-register-domain.rs +++ /dev/null @@ -1,27 +0,0 @@ -use eyre::Result; -use iroha_client::client::Client; -use iroha_data_model::prelude::*; - -use iroha_2_examples::load_client; - -// TODO: move to prelude? -use iroha_data_model::query::domain::model::FindAllDomains; - -fn main() -> Result<()> { - let client: Client = load_client("./config.json")?; - - // Create a Domain Id - let looking_glass: DomainId = "looking_glass".parse()?; - - // Register the domain - let register: InstructionBox = RegisterBox::new(Domain::new(looking_glass.clone())).into(); - client.submit_blocking(register)?; - - // Check what domains there are now - let domains = client - .request(FindAllDomains)? - .collect::, _>>()?; - assert!(domains.iter().find(|x| x.id == looking_glass).is_some()); - - Ok(()) -} diff --git a/Rust/examples/tutorial-4-register-account.rs b/Rust/examples/tutorial-4-register-account.rs deleted file mode 100644 index 453d206..0000000 --- a/Rust/examples/tutorial-4-register-account.rs +++ /dev/null @@ -1,40 +0,0 @@ -use eyre::Result; -use iroha_2_examples::load_client; -use iroha_client::client::Client; -use iroha_data_model::prelude::*; -use iroha_data_model::query::account::model::FindAllAccounts; - -// This function imitates the user sharing a public key. -// It generates a new public key for a new account. -// Normally, it is generated by Kagami. -fn get_key_from_white_rabbit() -> Result { - let (public_key, _) = iroha_crypto::KeyPair::generate()?.into(); - Ok(public_key) -} - -fn main() -> Result<()> { - let client: Client = load_client("./config.json")?; - - // Create an AccountId instance by providing the account and domain name - let account_id: AccountId = "white_rabbit@looking_glass".parse().expect( - // TODO: do we need it here? - r#" - Valid, because the string contains no whitespace, - has a single '@' character and is not empty after - "#, - ); - - // Use a public key that was shared by the white_rabbit. - let public_key = get_key_from_white_rabbit()?; - - // Generate a new account - let register = RegisterBox::new(Account::new(account_id.clone(), [public_key])); - client.submit_blocking(register)?; - - let accounts = client - .request(FindAllAccounts)? - .collect::, _>>()?; - assert!(accounts.iter().find(|x| x.id == account_id).is_some()); - - Ok(()) -} diff --git a/Rust/examples/tutorial-5-register-mint-burn-asset.rs b/Rust/examples/tutorial-5-register-mint-burn-asset.rs deleted file mode 100644 index bdf4bb4..0000000 --- a/Rust/examples/tutorial-5-register-mint-burn-asset.rs +++ /dev/null @@ -1,65 +0,0 @@ -use eyre::Result; -use iroha_2_examples::load_client; -use iroha_client::client::Client; -use iroha_data_model::prelude::*; -use std::str::FromStr; - -fn main() -> Result<()> { - let client: Client = load_client("./config.json")?; - - // Create an Asset Definition Id of the time - let time_definition = AssetDefinitionId::from_str("time#looking_glass")?; - - // Register the time asset - let register_time: InstructionBox = - RegisterBox::new(AssetDefinition::fixed(time_definition.clone()).mintable_once()).into(); - client.submit_blocking(register_time)?; - - // Check if the asset exists - { - let definition: AssetDefinition = client.request( - iroha_data_model::query::asset::model::FindAssetDefinitionById { - id: time_definition.clone().into(), - }, - )?; - println!("Time asset definition from Iroha: {definition:?}"); - } - - // Define the account the asset will belong to - let account_id = AccountId::from_str("white_rabbit@looking_glass")?; - let asset_id = AssetId::new(time_definition.clone(), account_id.clone()); - let find_asset_query = iroha_data_model::query::asset::model::FindAssetById { - id: asset_id.clone().into(), - }; - - // Create a MintBox using a previous asset and account - let mint: InstructionBox = - MintBox::new(12.34_f64.try_to_value()?, IdBox::AssetId(asset_id.clone())).into(); - client.submit_blocking(mint)?; - - // TODO: query asset, show result - { - let asset: Asset = client.request(find_asset_query.clone())?; - assert_eq!(asset.value, AssetValue::Fixed(12.34_f64.try_into()?)); - println!("Asset data after mint: {asset:?}"); - } - - // Burn the asset - let burn: InstructionBox = - BurnBox::new(2_f64.try_to_value()?, IdBox::AssetId(asset_id.clone())).into(); - client.submit_blocking(burn)?; - - { - let asset: Asset = client.request(find_asset_query.clone())?; - assert_eq!(asset.value, AssetValue::Fixed(10.34_f64.try_into()?)); - println!("Asset data after burn: {asset:?}"); - } - - Ok(()) -} - -// Output of this example: -// -// Time asset definition from Iroha: AssetDefinition { id: time#looking_glass, value_type: Fixed, mintable: Once, logo: None, metadata: Metadata { map: {} }, owned_by: alice@wonderland } -// Asset data after mint: Asset { id: time##white_rabbit@looking_glass, value: Fixed(Fixed(12.34)) } -// Asset data after burn: Asset { id: time##white_rabbit@looking_glass, value: Fixed(Fixed(10.34)) } diff --git a/Rust/src/lib.rs b/Rust/src/lib.rs index 2dba324..64d2a60 100644 --- a/Rust/src/lib.rs +++ b/Rust/src/lib.rs @@ -1,13 +1,326 @@ -use eyre::Result; -use iroha_client::client::Client; -use iroha_config::client::ConfigurationProxy; -use iroha_config_base::proxy::LoadFromDisk; -use std::path::Path; - -// FIXME: this should be a part of the client out of the box -pub fn load_client(path: impl AsRef) -> Result { - let mut config = ConfigurationProxy::from_path(path.as_ref().clone()); - config.finish()?; - let config = config.build()?; - Client::new(&config) +//! Iroha examples library. Doubles as a tutorial for Iroha's data model. + +use iroha::client::Client; +use iroha::config::Config; +use iroha::crypto::{Algorithm, ExposedPrivateKey, KeyPair, PublicKey}; +use iroha::data_model::prelude::*; + +pub type Result = eyre::Result; + +/// An example domain. +pub trait ExampleDomain { + /// Name of the example domain. + /// + /// Cannot be empty, cannot contain whitespace or reserved characters `@` and `#`. + const NAME: &'static str; + + /// A domain is identified by a [`DomainId`], which is backed by a [`Name`]. + /// + /// A [`Name`] cannot be empty, cannot contain whitespace or characters `@` and `#`, + /// which are reserved for accounts and assets. + fn id() -> DomainId { + // You can also parse into a `Name`, then use `DomainId::new`. + Self::NAME.parse::().unwrap() + } } + +/// An example signatory (someone who can sign transactions). +/// +/// In the examples, each signatory is a character. +pub trait ExampleSignatory { + /// Alias of the example signatory. + /// + /// TODO: Iroha does not support [alias resolution] yet, + /// this field is purely for example convenience now, + /// since public keys are not as readable. Used to + /// generate some of the example key pairs. + /// + /// [alias resolution]: https://github.com/hyperledger/iroha/issues/4372 + const ALIAS: &'static str; + + /// A signatory is identified by its public key. + /// + /// Some example signatories like [Alice] and [Bob] + /// override this and provide a previously defined key. + fn public_key() -> PublicKey { + let (public_key, private_key) = + KeyPair::from_seed(Self::ALIAS.as_bytes().to_vec(), Algorithm::default()).into_parts(); + println!( + "Generated key pair for `{}`\n\ + Public: {}\n\ + Private (save this): {}", + Self::ALIAS, + public_key, + ExposedPrivateKey(private_key), + ); + public_key + } +} + +/// An example account owned by an [`ExampleSignatory`] in an [`ExampleDomain`]. +pub struct ExampleAccount(Signatory, Domain); + +impl ExampleAccount +where + Signatory: ExampleSignatory, + Domain: ExampleDomain, +{ + /// An account is identified by an [`AccountId`] + /// composed of a [`PublicKey`] and a [`DomainId`]. + /// + /// An [`AccountId`] can be parsed from a string of the form `public_key@domain`. + pub fn id() -> AccountId { + let signatory = Signatory::public_key(); + let domain = Domain::id(); + // "signatory@domain".parse::().unwrap(); + AccountId::new(domain, signatory) + } + + /// You need a [`Client`] to be able to submit instructions to Iroha. + /// + /// A client acts on behalf of an account, which is sometimes called an *authority*. + /// Depending on which permissions the *authority* has, and which objects the *authority* + /// owns, instructions submitted by the client will succeed or fail. + /// + /// This function demonstrates how to set up a client, and provides + /// a way to quickly set up different actors in example scenarios. + pub fn client() -> Client { + // The corresponding config must exist at `../configs/{signatory}_{domain}.toml`. + let config = Config::load(format!( + "configs/{}_{}.toml", + Signatory::ALIAS, + Domain::NAME + )) + .expect("config is loaded and valid"); + let client = Client::new(config); + let expected_account = ExampleAccount::::id(); + assert_eq!( + client.account, + ExampleAccount::::id(), + "Client was requested for `{}`, but the actual authority does not match.\n\ + Check the corresponding client configuration file.\n\ + Expected: {}\n\ + Actual: {}", + Signatory::ALIAS, + expected_account, + client.account + ); + println!( + "Client for `{}` in `{}` created.\n\ + Authority: {}", + Signatory::ALIAS, + Domain::NAME, + client.account, + ); + client + } +} + +/// An example asset name. +/// +/// **Note:** the same asset name may appear in different domains. +/// It is meaningless unless specified to a [domain](ExampleDomain). +pub trait ExampleAssetName { + /// Human-readable asset name. + const NAME: &'static str; + + /// Constructs a [`Name`] from the [`ExampleAssetName`]. + /// + /// A [`Name`] cannot be empty, cannot contain whitespace or characters `@` and `#`, + /// which are reserved for accounts and assets. + /// + /// **Note:** an asset name is different from an [asset definition] or an [asset]. + /// + /// [asset definition]: ExampleAssetDefinition + /// [asset]: ExampleAsset + fn name() -> Name { + Self::NAME.parse::().unwrap() + } +} + +/// An asset definition with a [name](ExampleAssetName) +/// specified to a [domain](ExampleDomain). +/// +/// It is essentially a *blueprint* for a resource +/// that can be issued and managed for an account. +pub struct ExampleAssetDefinition(AssetName, Domain); + +impl ExampleAssetDefinition +where + AssetName: ExampleAssetName, + Domain: ExampleDomain, +{ + /// An asset definition is identified by an [`AssetDefinitionId`] + /// composed of a [`Name`] and a [`DomainId`]. + /// + /// An [`AssetDefinitionId`] can be parsed from a string of the form `asset_name#domain`. + pub fn id() -> AssetDefinitionId { + let asset_name = AssetName::name(); + let domain = Domain::id(); + // "asset_name#asset_domain".parse::().unwrap(); + AssetDefinitionId::new(domain, asset_name) + } +} + +/// An asset of a [certain type](ExampleAssetDefinition) +/// owned by an [account](ExampleAccount). +/// +/// **Note:** the asset definition and the account +/// do not have to belong to the same domain. +pub struct ExampleAsset(Definition, Account); + +impl + ExampleAsset< + ExampleAssetDefinition, + ExampleAccount, + > +where + AssetName: ExampleAssetName, + AssetDomain: ExampleDomain, + AssetOwner: ExampleSignatory, + OwnerDomain: ExampleDomain, +{ + /// An asset is identified by an [`AssetId`] + /// composed of an [`AssetDefinitionId`] and an [`AccountId`]. + /// + /// An [`AssetId`] has two string representation it can be parsed from: + /// - `asset_name#asset_domain#asset_owner@owner_domain`: + /// when the asset and its owner belong to different domains + /// - `asset_name##asset_owner@common_domain`: + /// when the asset and its owner share the domain + pub fn id() -> AssetId { + let asset_definition = ExampleAssetDefinition::::id(); + let owner = ExampleAccount::::id(); + // "asset_name#asset_domain#asset_owner@owner_domain".parse::().unwrap(); + // "asset_name##asset_owner@common_domain".parse::().unwrap(); + AssetId::new(asset_definition, owner) + } +} + +//////////////////////////////////////////// + +//////////////////////////////////////////// + +/// The `wonderland` domain is defined in the default genesis block. +pub struct Wonderland; + +impl ExampleDomain for Wonderland { + const NAME: &'static str = "wonderland"; +} + +/// The `chess` domain is registered in the examples. +pub struct Chess; + +impl ExampleDomain for Chess { + const NAME: &'static str = "chess"; +} + +//////////////////////////////////////////// + +/// `alice` is one of the signatories +/// with an account defined in the default genesis block. +pub struct Alice; + +impl ExampleSignatory for Alice { + const ALIAS: &'static str = "alice"; + + fn public_key() -> PublicKey { + "ed0120CE7FA46C9DCE7EA4B125E2E36BDB63EA33073E7590AC92816AE1E861B7048B03" + .parse::() + .unwrap() + } +} + +/// `bob` is one of the signatories +/// with an account defined in the default genesis block. +pub struct Bob; + +impl ExampleSignatory for Bob { + const ALIAS: &'static str = "bob"; + + fn public_key() -> PublicKey { + "ed012004FF5B81046DDCCF19E2E451C45DFB6F53759D4EB30FA2EFA807284D1CC33016" + .parse::() + .unwrap() + } +} + +/// `magnus` is an example signatory. +pub struct Magnus; + +impl ExampleSignatory for Magnus { + const ALIAS: &'static str = "magnus"; +} + +/// `alice@wonderland` is defined in the genesis block. +/// +/// This account starts out with: +/// - 13 [`WonderlandRoses`] +/// - 44 [`GardenCabbage`] +/// - ownership of the definition of wonderland roses +/// - ownership of [`Wonderland`] +/// - permission to set parameters +pub type AliceInWonderland = ExampleAccount; +/// `bob@wonderland` is defined in the genesis block. +pub type BobInWonderland = ExampleAccount; + +/// `alice@chess` is defined in the `account_register` example. +pub type AliceInChess = ExampleAccount; +/// `bob@chess` is defined in the `account_register` example. +pub type BobInChess = ExampleAccount; +/// `magnus@chess` is defined in the `account_register` example. +pub type MagnusInChess = ExampleAccount; + +//////////////////////////////////////////// + +/// The general idea of roses. +pub struct Roses; + +impl ExampleAssetName for Roses { + const NAME: &'static str = "rose"; +} + +/// The general idea of money. +pub struct Money; + +impl ExampleAssetName for Money { + const NAME: &'static str = "money"; +} + +/// The general idea of pawns. +pub struct Pawns; + +impl ExampleAssetName for Pawns { + const NAME: &'static str = "pawn"; +} + +/// The general idea of clothes. +pub struct Clothes; + +impl ExampleAssetName for Clothes { + const NAME: &'static str = "clothes"; +} + +/// `rose#wonderland` is defined in the default genesis block. +pub type WonderlandRoses = ExampleAssetDefinition; +/// `money#wonderland` is defined in the `asset_definition_register` example. +pub type WonderlandMoney = ExampleAssetDefinition; +/// `pawn#chess` is defined in the `asset_definition_register` example. +pub type ChessPawns = ExampleAssetDefinition; +/// `book#chess` is defined in the `asset_definition_register` example. +pub type ChessBook = ExampleAssetDefinition; + +/// `roses##alice@wonderland` is defined in the default genesis block. +pub type RosesOfAliceInWonderland = ExampleAsset; +/// `money##alice@wonderland` is defined in the `asset_numeric` example. +pub type MoneyOfAliceInWonderland = ExampleAsset; +/// `money##bob@wonderland` is defined in the `asset_numeric` example. +pub type MoneyOfBobInWonderland = ExampleAsset; +/// `money#wonderland#magnus@chess` is defined in the `asset_numeric` example. +pub type WonderlandMoneyOfMagnusInChess = ExampleAsset; +/// `pawn##alice@chess` is defined in the `asset_numeric` example. +pub type PawnsOfAliceInChess = ExampleAsset; +/// `pawn##bob@chess` is defined in the `asset_numeric` example. +pub type PawnsOfBobInChess = ExampleAsset; +/// `book##bob@chess` is defined in the `asset_store` example. +pub type BookOfBobInChess = ExampleAsset;