diff --git a/Cargo.lock b/Cargo.lock index 60fc7797..5faf1e9e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,200 +12,6 @@ dependencies = [ "regex", ] -[[package]] -name = "actix-codec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a36c014a3e811624313b51a227b775ecba55d36ef9462bbaac7d4f13e54c9271" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-sink", - "log", - "memchr", - "pin-project-lite", - "tokio", - "tokio-util 0.6.10", -] - -[[package]] -name = "actix-cors" -version = "0.6.0-beta.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10924f24839e08540bc12e404150646c7d5c83789b6d4e2f90f1046dd058d3fd" -dependencies = [ - "actix-service", - "actix-web", - "derive_more", - "futures-util", - "log", - "once_cell", - "smallvec", -] - -[[package]] -name = "actix-http" -version = "3.0.0-beta.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055b723746f19534fc5c9a210788686542986d6f1b9cb2900a297bb4c6619f3b" -dependencies = [ - "actix-codec", - "actix-rt", - "actix-service", - "actix-utils", - "ahash", - "base64 0.13.1", - "bitflags", - "bytes", - "bytestring", - "derive_more", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "httparse", - "httpdate", - "itoa 0.4.8", - "language-tags", - "local-channel", - "log", - "mime", - "percent-encoding", - "pin-project", - "pin-project-lite", - "rand", - "sha-1", - "smallvec", -] - -[[package]] -name = "actix-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "actix-router" -version = "0.5.0-beta.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53c1deabdbf3a8a8b9a949123edd3cafb873abd75da96b5933a8b590f9d6dc2" -dependencies = [ - "bytestring", - "firestorm", - "http", - "log", - "regex", - "serde", -] - -[[package]] -name = "actix-rt" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" -dependencies = [ - "actix-macros", - "futures-core", - "tokio", -] - -[[package]] -name = "actix-server" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327" -dependencies = [ - "actix-rt", - "actix-service", - "actix-utils", - "futures-core", - "futures-util", - "mio", - "num_cpus", - "socket2", - "tokio", - "tracing", -] - -[[package]] -name = "actix-service" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" -dependencies = [ - "futures-core", - "paste", - "pin-project-lite", -] - -[[package]] -name = "actix-utils" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" -dependencies = [ - "local-waker", - "pin-project-lite", -] - -[[package]] -name = "actix-web" -version = "4.0.0-beta.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657eb2ed5e8ef246b6e951bafb38644ca433042a65a44f02e5601083b71b895" -dependencies = [ - "actix-codec", - "actix-http", - "actix-macros", - "actix-router", - "actix-rt", - "actix-server", - "actix-service", - "actix-utils", - "actix-web-codegen", - "ahash", - "bytes", - "cfg-if", - "derive_more", - "either", - "encoding_rs", - "futures-core", - "futures-util", - "itoa 0.4.8", - "language-tags", - "log", - "mime", - "once_cell", - "paste", - "pin-project-lite", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "socket2", - "time", - "url", -] - -[[package]] -name = "actix-web-codegen" -version = "0.5.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a793e4a7bd059e06e1bc1bd9943b57a47f806de3599d2437441682292c333e" -dependencies = [ - "actix-router", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "addr2line" version = "0.19.0" @@ -232,17 +38,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "aho-corasick" version = "0.7.20" @@ -263,15 +58,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -291,15 +86,24 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] @@ -331,6 +135,54 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "axum" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b32c5ea3aabaf4deb5f5ced2d688ec0844c881c9e6c696a8b769a05fc691e62" +dependencies = [ + "async-trait", + "axum-core", + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "sync_wrapper", + "tokio", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backtrace" version = "0.3.67" @@ -348,31 +200,9 @@ dependencies = [ [[package]] name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - -[[package]] -name = "base58check" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee2fe4c9a0c84515f136aaae2466744a721af6d63339c18689d9e995d74d99b" -dependencies = [ - "base58", - "sha2 0.8.2", -] - -[[package]] -name = "base64" -version = "0.12.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" @@ -407,6 +237,21 @@ dependencies = [ "serde", ] +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitflags" version = "1.3.2" @@ -444,34 +289,13 @@ dependencies = [ "wyz", ] -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding", - "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 = [ - "generic-array 0.14.6", + "generic-array", ] [[package]] @@ -480,16 +304,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", + "generic-array", ] [[package]] @@ -497,6 +312,9 @@ name = "bs58" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +dependencies = [ + "sha2 0.9.9", +] [[package]] name = "bumpalo" @@ -516,12 +334,6 @@ 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" @@ -537,15 +349,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bytestring" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae" -dependencies = [ - "bytes", -] - [[package]] name = "camino" version = "1.1.4" @@ -566,9 +369,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", @@ -624,9 +427,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.49" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" dependencies = [ "cc", ] @@ -643,9 +446,9 @@ dependencies = [ [[package]] name = "coins-bip32" -version = "0.7.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634c509653de24b439672164bbf56f5f582a2ab0e313d3b0f6af0b7345cf2560" +checksum = "b30a84aab436fcb256a2ab3c80663d8aec686e6bae12827bb05fef3e1e439c9f" dependencies = [ "bincode", "bs58", @@ -662,16 +465,16 @@ dependencies = [ [[package]] name = "coins-bip39" -version = "0.7.0" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a11892bcac83b4c6e95ab84b5b06c76d9d70ad73548dd07418269c5c7977171" +checksum = "84f4d04ee18e58356accd644896aeb2094ddeafb6a713e056cef0c0a8e468c15" dependencies = [ "bitvec 0.17.4", "coins-bip32", "getrandom", - "hex", "hmac 0.12.1", - "pbkdf2", + "once_cell", + "pbkdf2 0.12.1", "rand", "sha2 0.10.6", "thiserror", @@ -679,16 +482,15 @@ dependencies = [ [[package]] name = "coins-core" -version = "0.7.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94090a6663f224feae66ab01e41a2555a8296ee07b5f20dab8888bdefc9f617" +checksum = "9b949a1c63fb7eb591eb7ba438746326aedf0ae843e51ec92ba6bec5bb382c4f" dependencies = [ - "base58check", - "base64 0.12.3", + "base64 0.21.0", "bech32", - "blake2", + "bs58", "digest 0.10.6", - "generic-array 0.14.6", + "generic-array", "hex", "ripemd", "serde", @@ -717,21 +519,6 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "convert_case" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "core-foundation" version = "0.9.3" @@ -744,9 +531,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cost-model" @@ -767,13 +554,56 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] +[[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.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -782,11 +612,11 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.4.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" dependencies = [ - "generic-array 0.14.6", + "generic-array", "rand_core", "subtle", "zeroize", @@ -798,7 +628,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", + "generic-array", "typenum", ] @@ -808,7 +638,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.6", + "generic-array", "subtle", ] @@ -823,9 +653,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -835,9 +665,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -845,24 +675,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] @@ -908,9 +738,9 @@ checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "der" -version = "0.6.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +checksum = "82b10af9f9f9f2134a42d3f8aa74658660f2e0234b0eb81bd171df8aa32779ed" dependencies = [ "const-oid", "zeroize", @@ -922,21 +752,16 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version", "syn 1.0.109", ] [[package]] -name = "digest" -version = "0.8.1" +name = "diff" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "digest" @@ -944,7 +769,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array", ] [[package]] @@ -954,10 +779,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer 0.10.4", + "const-oid", "crypto-common", "subtle", ] +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +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 = "duct" version = "0.13.6" @@ -978,11 +825,12 @@ checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" [[package]] name = "ecdsa" -version = "0.14.8" +version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "a48e5d537b8a30c0b023116d981b16334be1485af7ca68db3a2b7024cbc957fd" dependencies = [ "der", + "digest 0.10.6", "elliptic-curve", "rfc6979", "signature", @@ -1006,16 +854,15 @@ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "elliptic-curve" -version = "0.12.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "75c71eaa367f2e5d556414a8eea812bc62985c879748d6403edabd9cb03f16e7" dependencies = [ "base16ct", "crypto-bigint", - "der", "digest 0.10.6", "ff", - "generic-array 0.14.6", + "generic-array", "group", "pkcs8", "rand_core", @@ -1024,6 +871,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ena" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +dependencies = [ + "log", +] + [[package]] name = "encoding_rs" version = "0.8.32" @@ -1035,12 +891,11 @@ dependencies = [ [[package]] name = "enr" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "492a7e5fc2504d5fdce8e124d3e263b244a68b283cac67a69eda0cd43e0aebad" +checksum = "eb4d5fbf6f56acecd38f5988eb2e4ae412008a2a30268c748c701ec6322f39d4" dependencies = [ "base64 0.13.1", - "bs58", "bytes", "hex", "k256", @@ -1066,13 +921,13 @@ dependencies = [ [[package]] name = "errno" -version = "0.2.8" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -1096,7 +951,7 @@ dependencies = [ "digest 0.10.6", "hex", "hmac 0.12.1", - "pbkdf2", + "pbkdf2 0.11.0", "rand", "scrypt", "serde", @@ -1157,9 +1012,9 @@ dependencies = [ [[package]] name = "ethers" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839a392641e746a1ff365ef7c901238410b5c6285d240cf2409ffaaa7df9a78a" +checksum = "356eaf2e3947efa975c3f953e33f73193e5e21b9d8bab26c3ca532676931696f" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -1168,13 +1023,14 @@ dependencies = [ "ethers-middleware", "ethers-providers", "ethers-signers", + "ethers-solc", ] [[package]] name = "ethers-addressbook" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1e010165c08a2a3fa43c0bb8bc9d596f079a021aaa2cc4e8d921df09709c95" +checksum = "d56f1c92cb7c406794c8324158da4caf9e54018e28b776df8155085e1d06db75" dependencies = [ "ethers-core", "once_cell", @@ -1184,9 +1040,9 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be33fd47a06cc8f97caf614cf7cf91af9dd6dcd767511578895fa884b430c4b8" +checksum = "2a328cb42014ac0ac577a8dac32eb658ee0f32b5a9a5317a0329ac1d4201f1c6" dependencies = [ "ethers-contract-abigen", "ethers-contract-derive", @@ -1203,12 +1059,11 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d9f9ecb4a18c1693de954404b66e0c9df31dac055b411645e38c4efebf3dbc" +checksum = "d96813e4b58b6c6b817367380db900dddbd67bfe27610ec89fd3263778d5a4aa" dependencies = [ "Inflector", - "cfg-if", "dunce", "ethers-core", "ethers-etherscan", @@ -1222,7 +1077,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 1.0.109", + "syn 2.0.14", "tokio", "toml", "url", @@ -1231,48 +1086,45 @@ dependencies = [ [[package]] name = "ethers-contract-derive" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001b33443a67e273120923df18bab907a0744ad4b5fef681a8b0691f2ee0f3de" +checksum = "373068bb24b4dea8fe0d1758aadab2dd4ec9de1d2c28316439cadcda3ed48eae" dependencies = [ + "Inflector", "ethers-contract-abigen", "ethers-core", - "eyre", "hex", "proc-macro2", "quote", "serde_json", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] name = "ethers-core" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5925cba515ac18eb5c798ddf6069cc33ae00916cb08ae64194364a1b35c100b" +checksum = "3a5f8f85ba96698eab9a4782ed2215d0979b1981b99f1be0726c200ffdac22f5" dependencies = [ "arrayvec 0.7.2", "bytes", "cargo_metadata", "chrono", - "convert_case 0.6.0", "elliptic-curve", "ethabi", - "generic-array 0.14.6", + "generic-array", "getrandom", "hex", "k256", - "num_enum", + "num_enum 0.6.0", "once_cell", "open-fastrlp", - "proc-macro2", "rand", "rlp", - "rlp-derive", "serde", "serde_json", "strum", - "syn 1.0.109", + "syn 2.0.14", "tempfile", "thiserror", "tiny-keccak", @@ -1281,16 +1133,16 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d769437fafd0b47ea8b95e774e343c5195c77423f0f54b48d11c0d9ed2148ad" +checksum = "7cfc3d36be9e16bac241e1d59ec9ace00e8e4241c09f604a0f65158eb37d4878" dependencies = [ "ethers-core", + "ethers-solc", "getrandom", "reqwest", "semver", "serde", - "serde-aux", "serde_json", "thiserror", "tracing", @@ -1298,9 +1150,9 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7dd311b76eab9d15209e4fd16bb419e25543709cbdf33079e8923dfa597517c" +checksum = "1e6f3543b4f6679b2558901c4b323cecb06b19239439d2588fa8b489bac9675d" dependencies = [ "async-trait", "auto_impl", @@ -1309,6 +1161,7 @@ dependencies = [ "ethers-etherscan", "ethers-providers", "ethers-signers", + "futures-channel", "futures-locks", "futures-util", "instant", @@ -1324,13 +1177,14 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7174af93619e81844d3d49887106a3721e5caecdf306e0b824bfb4316db3be" +checksum = "7c9d2cbed43cf618004dbe339e389e10dae46ea8e55872ab63a25fad25a6082a" dependencies = [ "async-trait", "auto_impl", "base64 0.21.0", + "bytes", "enr", "ethers-core", "futures-core", @@ -1340,8 +1194,8 @@ dependencies = [ "hashers", "hex", "http", + "instant", "once_cell", - "parking_lot 0.11.2", "pin-project", "reqwest", "serde", @@ -1353,16 +1207,15 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-timer", "web-sys", "ws_stream_wasm", ] [[package]] name = "ethers-signers" -version = "2.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d45ff294473124fd5bb96be56516ace179eef0eaec5b281f68c953ddea1a8bf" +checksum = "d56871f70b97cc5cced5c39c88a0196c206d8f7fb8e1e0952fbf1fb73c033219" dependencies = [ "async-trait", "coins-bip32", @@ -1377,6 +1230,37 @@ dependencies = [ "tracing", ] +[[package]] +name = "ethers-solc" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e967e60bca8fc83d640a7aebd1492d625c43e86b88a5a5bb08b1019472d5d6b" +dependencies = [ + "cfg-if", + "dunce", + "ethers-core", + "getrandom", + "glob", + "hex", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver", + "serde", + "serde_json", + "solang-parser", + "thiserror", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi", +] + [[package]] name = "eventuals" version = "0.6.7" @@ -1421,12 +1305,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - [[package]] name = "faster-hex" version = "0.6.1" @@ -1444,9 +1322,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core", "subtle", @@ -1470,6 +1348,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "fnv" version = "1.0.7" @@ -1503,9 +1387,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -1518,9 +1402,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -1528,15 +1412,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -1545,9 +1429,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-locks" @@ -1561,38 +1445,42 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-timer" version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1617,28 +1505,20 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.12.4" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "js-sys", @@ -1653,14 +1533,29 @@ version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "graph-gateway" version = "12.0.1" dependencies = [ - "actix-cors", - "actix-http", - "actix-router", - "actix-web", + "axum", "chrono", "futures", "futures-util", @@ -1672,7 +1567,7 @@ dependencies = [ "itertools", "lazy_static", "maxminddb", - "parking_lot 0.12.1", + "parking_lot", "prelude", "primitive-types", "prometheus", @@ -1688,9 +1583,11 @@ dependencies = [ "simple-rate-limiter", "thiserror", "tiny-bip39", + "tower", + "tower-http", "tracing-subscriber", "trust-dns-resolver", - "uuid 1.3.0", + "uuid 1.3.1", ] [[package]] @@ -1721,9 +1618,9 @@ dependencies = [ [[package]] name = "group" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core", @@ -1745,7 +1642,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.7.7", + "tokio-util", "tracing", ] @@ -1797,6 +1694,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -1829,10 +1732,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.6", + "generic-array", "hmac 0.8.1", ] +[[package]] +name = "home" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408" +dependencies = [ + "winapi", +] + [[package]] name = "hostname" version = "0.3.1" @@ -1852,7 +1764,7 @@ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", - "itoa 1.0.6", + "itoa", ] [[package]] @@ -1866,6 +1778,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + [[package]] name = "httparse" version = "1.8.0" @@ -1893,7 +1811,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.6", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -1917,16 +1835,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows", ] [[package]] @@ -2046,9 +1964,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -2061,7 +1979,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.6", + "generic-array", ] [[package]] @@ -2071,19 +1989,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", ] [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ + "hermit-abi 0.3.1", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2100,9 +2016,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "ipnetwork" @@ -2113,6 +2029,18 @@ dependencies = [ "serde", ] +[[package]] +name = "is-terminal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.48.0", +] + [[package]] name = "itertools" version = "0.10.5" @@ -2122,12 +2050,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.6" @@ -2145,15 +2067,16 @@ dependencies = [ [[package]] name = "k256" -version = "0.11.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", + "once_cell", "sha2 0.10.6", - "sha3", + "signature", ] [[package]] @@ -2185,10 +2108,36 @@ dependencies = [ ] [[package]] -name = "language-tags" -version = "0.3.2" +name = "lalrpop" +version = "0.19.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f34313ec00c2eb5c3c87ca6732ea02dcf3af99c3ff7a8fb622ffb99c9d860a87" +dependencies = [ + "ascii-canvas", + "bit-set", + "diff", + "ena", + "is-terminal", + "itertools", + "lalrpop-util", + "petgraph", + "pico-args", + "regex", + "regex-syntax", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "lalrpop-util" +version = "0.19.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" +checksum = "e5c1f7869c94d214466c5fd432dfed12c379fd87786768d36455892d46b18edd" +dependencies = [ + "regex", +] [[package]] name = "lazy_static" @@ -2211,9 +2160,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.140" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "libm" @@ -2298,27 +2247,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" - -[[package]] -name = "local-channel" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" -dependencies = [ - "futures-core", - "futures-sink", - "futures-util", - "local-waker", -] - -[[package]] -name = "local-waker" -version = "0.1.3" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" [[package]] name = "lock_api" @@ -2369,6 +2300,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +[[package]] +name = "matchit" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" + [[package]] name = "maxminddb" version = "0.23.0" @@ -2381,17 +2318,35 @@ dependencies = [ "serde", ] +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.6", +] + [[package]] name = "memchr" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" @@ -2420,6 +2375,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c96aba5aa877601bb3f6dd6a63a969e1f82e60646e81e71b14496995e9853c91" +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + [[package]] name = "nom" version = "5.1.2" @@ -2525,7 +2486,7 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] @@ -2535,7 +2496,16 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0fa9d8a04aa0af7b5845b514a828f829ae3f0ec3f60d9842e1dfaeb49a0e68b" +dependencies = [ + "num_enum_derive 0.6.0", ] [[package]] @@ -2550,6 +2520,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num_enum_derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e51dcc6bafb7f3ac88b65d2ad21f4b53d878e496712060e23011862ebd2d2d1" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.14", +] + [[package]] name = "object" version = "0.30.3" @@ -2565,12 +2547,6 @@ version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" -[[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" @@ -2610,20 +2586,19 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.25.1+1.1.1t" +version = "111.25.2+1.1.1t" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ef9a9cc6ea7d9d5e7c4a913dc4b48d0e359eddf01af1dfec96ba7064b4aba10" +checksum = "320708a054ad9b3bf314688b5db87cf4d6683d64cfc835e2337924ae62bf4431" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.81" +version = "0.9.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176be2629957c157240f68f61f2d0053ad3a4ecfdd9ebf1e6521d18d9635cf67" +checksum = "0d3d193fb1488ad46ffe3aaabc912cc931d02ee8518fe2959aea8ef52718b0c0" dependencies = [ - "autocfg", "cc", "libc", "openssl-src", @@ -2633,9 +2608,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "3.4.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d84eb1409416d254e4a9c8fa56cc24701755025b458f0fcd8e59e1f5f40c23bf" +checksum = "13a384337e997e6860ffbaa83708b2ef329fd8c54cb67a5f64d421e0f943254f" dependencies = [ "num-traits", ] @@ -2682,17 +2657,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.1" @@ -2700,21 +2664,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -2725,38 +2675,34 @@ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "windows-sys 0.45.0", ] [[package]] -name = "password-hash" -version = "0.4.2" +name = "path-slash" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core", - "subtle", -] +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" [[package]] -name = "paste" -version = "1.0.12" +name = "pbkdf2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.6", +] [[package]] name = "pbkdf2" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" dependencies = [ "digest 0.10.6", "hmac 0.12.1", - "password-hash", - "sha2 0.10.6", ] [[package]] @@ -2771,6 +2717,16 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df202b0b0f5b8e389955afd5f27b007b00fb948162953f1db9c70d2c7e3157d7" +[[package]] +name = "petgraph" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +dependencies = [ + "fixedbitset", + "indexmap", +] + [[package]] name = "pharos" version = "0.5.3" @@ -2781,6 +2737,63 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "phf" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +dependencies = [ + "phf_macros", + "phf_shared 0.11.1", +] + +[[package]] +name = "phf_generator" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +dependencies = [ + "phf_shared 0.11.1", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +dependencies = [ + "phf_generator", + "phf_shared 0.11.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pico-args" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" + [[package]] name = "pin-project" version = "1.0.12" @@ -2815,9 +2828,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs8" -version = "0.9.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der", "spki", @@ -2835,6 +2848,12 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + [[package]] name = "prelude" version = "0.0.1" @@ -2857,12 +2876,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.25" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "1ceca8aaf45b5c46ec7ed39fff75f57290368c1846d33d24a122ca81416ab058" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] @@ -2915,9 +2934,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -2932,15 +2951,15 @@ dependencies = [ "fnv", "lazy_static", "memchr", - "parking_lot 0.12.1", + "parking_lot", "thiserror", ] [[package]] name = "prost" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", "prost-derive", @@ -2948,9 +2967,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools", @@ -3020,19 +3039,41 @@ dependencies = [ name = "rand_distr" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ - "num-traits", - "rand", + "either", + "rayon-core", ] [[package]] -name = "rand_xoshiro" -version = "0.6.0" +name = "rayon-core" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ - "rand_core", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", ] [[package]] @@ -3061,7 +3102,7 @@ checksum = "d222a401698c7f2010e3967353eae566d9934dcda49c29910da922414ab4e3f4" dependencies = [ "libc", "libz-sys", - "num_enum", + "num_enum 0.5.11", "openssl-sys", "pkg-config", "sasl2-sys", @@ -3089,11 +3130,31 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall 0.2.16", + "thiserror", +] + [[package]] name = "regex" -version = "1.7.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -3111,15 +3172,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "reqwest" -version = "0.11.14" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" dependencies = [ "base64 0.21.0", "bytes", @@ -3152,7 +3213,6 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", "winreg", ] @@ -3168,13 +3228,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint", "hmac 0.12.1", - "zeroize", + "subtle", ] [[package]] @@ -3208,6 +3267,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", + "rlp-derive", "rustc-hex", ] @@ -3224,9 +3284,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" [[package]] name = "rustc-hash" @@ -3251,16 +3311,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.9" +version = "0.37.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -3341,9 +3401,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" +checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97" dependencies = [ "cfg-if", "derive_more", @@ -3353,9 +3413,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" +checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -3391,7 +3451,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ "hmac 0.12.1", - "pbkdf2", + "pbkdf2 0.11.0", "salsa20", "sha2 0.10.6", ] @@ -3408,13 +3468,13 @@ dependencies = [ [[package]] name = "sec1" -version = "0.3.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" dependencies = [ "base16ct", "der", - "generic-array 0.14.6", + "generic-array", "pkcs8", "subtle", "zeroize", @@ -3488,6 +3548,12 @@ dependencies = [ "serde", ] +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + [[package]] name = "send_wrapper" version = "0.6.0" @@ -3496,23 +3562,13 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.156" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" dependencies = [ "serde_derive", ] -[[package]] -name = "serde-aux" -version = "4.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c599b3fd89a75e0c18d6d2be693ddb12cccaf771db4ff9e39097104808a014c0" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "serde_cbor_2" version = "0.12.0-dev" @@ -3525,26 +3581,44 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ - "itoa 1.0.6", + "itoa", "ryu", "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3552,16 +3626,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.6", + "itoa", "ryu", "serde", ] [[package]] name = "serde_with" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85456ffac572dc8826334164f2fb6fb40a7c766aebe195a2a21ee69ee2885ecf" +checksum = "331bb8c3bf9b92457ab7abecf07078c13f7d270ba490103e84e8b014490cd0b0" dependencies = [ "base64 0.13.1", "chrono", @@ -3575,9 +3649,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cbcd6104f8a4ab6af7f6be2a0da6be86b9de3c401f6e86bb856ab2af739232f" +checksum = "859011bddcc11f289f07f467cc1fe01c7a941daa4d8f6c40d4d1c92eb6d9319c" dependencies = [ "darling", "proc-macro2", @@ -3587,42 +3661,17 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.19" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82e6c8c047aa50a7328632d067bcae6ef38772a79e28daf32f735e0e4f3dd10" +checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" dependencies = [ "indexmap", - "itoa 1.0.6", + "itoa", "ryu", "serde", "unsafe-libyaml", ] -[[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 = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - [[package]] name = "sha2" version = "0.9.9" @@ -3633,7 +3682,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug", ] [[package]] @@ -3649,9 +3698,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "54c2bb1a323307527314a36bfb73f24febb08ce2b8a554bf4ffd6f51ad15198c" dependencies = [ "digest 0.10.6", "keccak", @@ -3676,20 +3725,11 @@ dependencies = [ "winapi", ] -[[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.6.4" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ "digest 0.10.6", "rand_core", @@ -3701,7 +3741,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d06b30e22500a25f4b84f8a899182c5c934393cd48adc93b790292b641e38e6a" dependencies = [ - "parking_lot 0.12.1", + "parking_lot", ] [[package]] @@ -3772,6 +3812,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "solang-parser" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c5ead679f39243782be98c2689e592fc0fc9489ca2e47c9e027bd30f948df31" +dependencies = [ + "itertools", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror", + "unicode-xid", +] + [[package]] name = "spin" version = "0.5.2" @@ -3780,9 +3834,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spki" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" dependencies = [ "base64ct", "der", @@ -3794,6 +3848,19 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", +] + [[package]] name = "strsim" version = "0.10.0" @@ -3841,15 +3908,21 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.11" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" +checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "synstructure" version = "0.12.6" @@ -3870,15 +3943,26 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", + "redox_syscall 0.3.5", "rustix", - "windows-sys 0.42.0", + "windows-sys 0.45.0", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", ] [[package]] @@ -3907,7 +3991,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.14", ] [[package]] @@ -3926,7 +4010,7 @@ version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ - "itoa 1.0.6", + "itoa", "serde", "time-core", "time-macros", @@ -3956,7 +4040,7 @@ dependencies = [ "anyhow", "hmac 0.12.1", "once_cell", - "pbkdf2", + "pbkdf2 0.11.0", "rand", "rustc-hash", "sha2 0.10.6", @@ -3992,19 +4076,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", - "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.45.0", @@ -4012,13 +4094,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.14", ] [[package]] @@ -4032,20 +4114,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.7" @@ -4062,11 +4130,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] @@ -4074,14 +4145,19 @@ name = "toml_datetime" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.19.7" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -4101,6 +4177,46 @@ dependencies = [ "url", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -4181,7 +4297,7 @@ dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "regex", "serde", "serde_json", @@ -4234,7 +4350,7 @@ dependencies = [ "ipconfig", "lazy_static", "lru-cache", - "parking_lot 0.12.1", + "parking_lot", "resolv-conf", "rustls", "smallvec", @@ -4272,9 +4388,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -4291,12 +4407,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - [[package]] name = "unicode-width" version = "0.1.10" @@ -4320,9 +4430,9 @@ dependencies = [ [[package]] name = "unsafe-libyaml" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad2024452afd3874bf539695e04af6732ba06517424dbf958fdb16a01f3bef6c" +checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" [[package]] name = "untrusted" @@ -4353,9 +4463,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb" dependencies = [ "getrandom", ] @@ -4386,12 +4496,11 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -4477,21 +4586,6 @@ version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-sys" version = "0.3.61" @@ -4558,19 +4652,28 @@ 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 0.48.0", +] + [[package]] name = "windows-sys" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 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", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -4579,7 +4682,16 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", ] [[package]] @@ -4588,13 +4700,28 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 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", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] @@ -4603,47 +4730,89 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "winnow" -version = "0.3.6" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" +checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" dependencies = [ "memchr", ] @@ -4669,7 +4838,7 @@ dependencies = [ "log", "pharos", "rustc_version", - "send_wrapper", + "send_wrapper 0.6.0", "thiserror", "wasm-bindgen", "wasm-bindgen-futures", @@ -4685,23 +4854,28 @@ dependencies = [ "tap", ] +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure", + "syn 2.0.14", ] diff --git a/graph-gateway/Cargo.toml b/graph-gateway/Cargo.toml index a3a26872..3a280d29 100644 --- a/graph-gateway/Cargo.toml +++ b/graph-gateway/Cargo.toml @@ -4,10 +4,10 @@ name = "graph-gateway" version = "12.0.1" [dependencies] -actix-cors = "=0.6.0-beta.4" -actix-http = { version = "=3.0.0-beta.14", default-features = false } -actix-web = { version = "=4.0.0-beta.13", default-features = false } -actix-router = "=0.5.0-beta.4" +axum = { version = "0.6.15", default-features = false, features = [ + "json", + "tokio", +] } chrono = { version = "0.4", default-features = false, features = ["clock"] } futures = "0.3" futures-util = "0.3" @@ -23,7 +23,7 @@ parking_lot = "0.12.0" prelude = { path = "../prelude" } primitive-types = "0.12" prometheus = { version = "0.13", default-features = false } -rdkafka = { version = "0.29", features = [ "gssapi-vendored", "ssl-vendored" ] } +rdkafka = { version = "0.29", features = ["gssapi-vendored", "ssl-vendored"] } secp256k1 = { version = "0.24", default-features = false } semver = "1.0" serde = "1.0" @@ -36,7 +36,13 @@ trust-dns-resolver = { version = "0.22", features = ["dns-over-rustls"] } uuid = { version = "1.0", default-features = false, features = ["v4"] } prost = "0.11.8" thiserror = "1.0.40" -tracing-subscriber = { version = "0.3.16", features = ["env-filter", "json", "parking_lot"] } +tower = "0.4.13" +tower-http = { version = "0.4.0", features = ["cors"] } +tracing-subscriber = { version = "0.3.16", features = [ + "env-filter", + "json", + "parking_lot", +] } [dev-dependencies] regex = "1.5" diff --git a/graph-gateway/src/block_constraints.rs b/graph-gateway/src/block_constraints.rs index 167aaab7..d458f1b6 100644 --- a/graph-gateway/src/block_constraints.rs +++ b/graph-gateway/src/block_constraints.rs @@ -42,9 +42,9 @@ pub fn block_constraints<'c>(context: &'c Context<'c>) -> Option>(); + .filter(|d| !vars.0.contains_key(&d.name)) + .filter_map(|d| Some((d.name.clone(), d.default_value.as_ref()?.to_graphql()))) + .collect::>(); (&query.selection_set, defaults) } OperationDefinition::Query(_) @@ -88,9 +88,9 @@ pub fn make_query_deterministic( let defaults = query .variable_definitions .iter() - .filter(|d| !vars.0.contains_key(d.name)) - .filter_map(|d| Some((d.name, d.default_value.as_ref()?.to_graphql()))) - .collect::>(); + .filter(|d| !vars.0.contains_key(&d.name)) + .filter_map(|d| Some((d.name.clone(), d.default_value.as_ref()?.to_graphql()))) + .collect::>(); (&mut query.selection_set, defaults) } OperationDefinition::Query(_) @@ -123,7 +123,7 @@ pub fn make_query_deterministic( None => { selection_field .arguments - .push(("block", deterministic_block(&latest.hash))); + .push(("block".to_string(), deterministic_block(&latest.hash))); } }; } @@ -146,21 +146,21 @@ pub fn make_query_deterministic( .ok() } -fn deterministic_block<'c>(hash: &Bytes32) -> Value<'c, &'c str> { +fn deterministic_block<'c>(hash: &Bytes32) -> Value<'c, String> { Value::Object(BTreeMap::from_iter([( - "hash", + "hash".to_string(), Value::String(hash.to_string()), )])) } -fn field_constraint<'c>( +fn field_constraint( vars: &QueryVariables, - defaults: &BTreeMap<&str, StaticValue>, - field: &Value<'c, &'c str>, + defaults: &BTreeMap, + field: &Value<'_, String>, ) -> Option { match field { Value::Object(fields) => parse_constraint(vars, defaults, fields), - Value::Variable(name) => match vars.get(*name)? { + Value::Variable(name) => match vars.get(name)? { Value::Object(fields) => parse_constraint(vars, defaults, fields), _ => None, }, @@ -170,7 +170,7 @@ fn field_constraint<'c>( fn parse_constraint<'c, T: Text<'c>>( vars: &QueryVariables, - defaults: &BTreeMap<&str, StaticValue>, + defaults: &BTreeMap, fields: &BTreeMap>, ) -> Option { let field = fields.iter().at_most_one().ok()?; @@ -190,7 +190,7 @@ fn parse_constraint<'c, T: Text<'c>>( fn parse_hash<'c, T: Text<'c>>( hash: &Value<'c, T>, variables: &QueryVariables, - defaults: &BTreeMap<&str, StaticValue>, + defaults: &BTreeMap, ) -> Option { match hash { Value::String(hash) => hash.parse().ok(), @@ -208,7 +208,7 @@ fn parse_hash<'c, T: Text<'c>>( fn parse_number<'c, T: Text<'c>>( number: &Value<'c, T>, variables: &QueryVariables, - defaults: &BTreeMap<&str, StaticValue>, + defaults: &BTreeMap, ) -> Option { let n = match number { Value::Int(n) => n, diff --git a/graph-gateway/src/chains/mod.rs b/graph-gateway/src/chains/mod.rs index b2d56120..896de9a6 100644 --- a/graph-gateway/src/chains/mod.rs +++ b/graph-gateway/src/chains/mod.rs @@ -2,7 +2,6 @@ pub mod ethereum; pub mod test; use crate::{block_constraints::*, metrics::*}; -use actix_web::Result; use indexer_selection::UnresolvedBlock; use prelude::{epoch_cache::EpochCache, tokio::time::interval, *}; use std::collections::{BTreeSet, HashMap}; diff --git a/graph-gateway/src/client_query.rs b/graph-gateway/src/client_query.rs index c25fdfd1..911aef44 100644 --- a/graph-gateway/src/client_query.rs +++ b/graph-gateway/src/client_query.rs @@ -14,11 +14,12 @@ use crate::{ MISCATEGORIZED_ATTESTABLE_ERROR_MESSAGE_FRAGMENTS, UNATTESTABLE_ERROR_MESSAGE_FRAGMENTS, }, }; -use actix_http::{ - header::{AUTHORIZATION, ORIGIN}, - StatusCode, +use axum::{ + body::Bytes, + extract::{Path, State}, + http::{header, HeaderMap, Response, StatusCode}, + Json, }; -use actix_web::{http::header, web, HttpRequest, HttpResponse, HttpResponseBuilder}; use futures::future::join_all; use indexer_selection::{ actor::Update, BlockRequirements, Context as AgoraContext, @@ -30,13 +31,11 @@ use prelude::{ anyhow::{anyhow, bail, Context as _}, buffer_queue::QueueWriter, double_buffer::DoubleBufferReader, - graphql::{ - graphql_parser::query::{OperationDefinition, SelectionSet}, - http::Response, - }, + graphql::graphql_parser::query::{OperationDefinition, SelectionSet}, url::Url, DeploymentId, Eventual, *, }; +use prost::bytes::Buf; use serde::Deserialize; use serde_json::value::RawValue; use std::{ @@ -108,18 +107,20 @@ pub struct QueryBody { } pub async fn handle_query( - request: HttpRequest, - payload: web::Json, - ctx: web::Data, -) -> HttpResponse { + State(ctx): State, + Path(params): Path>, + headers: HeaderMap, + payload: Bytes, +) -> Response { let start_time_ms = unix_timestamp(); - let headers = request.headers(); let ray_id = headers.get("cf-ray").and_then(|value| value.to_str().ok()); let query_id = ray_id.map(ToString::to_string).unwrap_or_else(query_id); let auth = match ( - request.match_info().get("api_key"), - headers.get(AUTHORIZATION).and_then(|h| h.to_str().ok()), + params.get("api_key"), + headers + .get(header::AUTHORIZATION) + .and_then(|h| h.to_str().ok()), ) { (Some(param), _) => param, (None, Some(header)) => header.trim_start_matches("Bearer").trim(), @@ -131,12 +132,8 @@ pub async fn handle_query( .parse_token(auth) .context("Invalid API key"); - let subgraph_resolution_result = resolve_subgraph_deployment( - &ctx.subgraph_deployments, - &ctx.subgraph_info, - request.match_info(), - ) - .await; + let subgraph_resolution_result = + resolve_subgraph_deployment(&ctx.subgraph_deployments, &ctx.subgraph_info, ¶ms).await; let deployment = subgraph_resolution_result .as_ref() .map(|subgraph_info| subgraph_info.deployment.to_string()) @@ -150,14 +147,14 @@ pub async fn handle_query( ); let domain = headers - .get(ORIGIN) + .get(header::ORIGIN) .and_then(|v| v.to_str().ok()) .and_then(|v| Some(v.parse::().ok()?.host_str()?.to_string())) .unwrap_or("".to_string()); let result = match (auth, subgraph_resolution_result) { (Ok(auth), Ok(subgraph_info)) => { - handle_client_query_inner(&ctx, subgraph_info, payload.0, auth, domain) + handle_client_query_inner(&ctx, subgraph_info, payload, auth, domain) .instrument(span.clone()) .await } @@ -181,26 +178,31 @@ pub async fn handle_query( ); }); - let mut response_builder = HttpResponseBuilder::new(StatusCode::OK); - response_builder.insert_header(header::ContentType::json()); + let response = Response::builder().header(header::CONTENT_TYPE, "application/json"); match result { Ok(ResponsePayload { body, attestation }) => { let attestation = attestation .as_ref() .and_then(|attestation| serde_json::to_string(attestation).ok()) .unwrap_or_default(); - response_builder - .insert_header(("Graph-Attestation", attestation)) - .body(body.as_ref()) + response + .header("Graph-Attestation", attestation) + .body(body.to_string()) + .unwrap() + } + Err(err) => { + let (_, Json(body)) = graphql_error_response(err.to_string()); + response + .body(serde_json::to_string(&body).unwrap()) + .unwrap() } - Err(err) => graphql_error_response(err.to_string()), } } async fn resolve_subgraph_deployment( deployments: &SubgraphDeployments, subgraph_info: &SubgraphInfoMap, - params: &actix_web::dev::Path, + params: &BTreeMap, ) -> Result, Error> { let deployment = if let Some(id) = params.get("subgraph_id") { let subgraph = id @@ -228,7 +230,7 @@ async fn resolve_subgraph_deployment( async fn handle_client_query_inner( ctx: &Context, subgraph_info: Ptr, - payload: QueryBody, + payload: Bytes, auth: AuthToken, domain: String, ) -> Result { @@ -252,6 +254,9 @@ async fn handle_client_query_inner( ), }; + let payload: QueryBody = + serde_json::from_reader(payload.reader()).map_err(|err| Error::InvalidQuery(err.into()))?; + ctx.auth_handler .check_token(&auth, &subgraph_info, &domain) .await @@ -613,13 +618,14 @@ async fn handle_indexer_query_inner( tracing::warn!(indexer_response_status = %response.status); } - let indexer_errors = serde_json::from_str::>>(&response.payload.body) - .map_err(|_| IndexerError::UnexpectedPayload)? - .errors - .unwrap_or_default() - .into_iter() - .map(|err| err.message) - .collect::>(); + let indexer_errors = + serde_json::from_str::>>(&response.payload.body) + .map_err(|_| IndexerError::UnexpectedPayload)? + .errors + .unwrap_or_default() + .into_iter() + .map(|err| err.message) + .collect::>(); tracing::info!( target: reports::INDEXER_QUERY_TARGET, @@ -732,6 +738,6 @@ fn count_top_level_selection_sets(ctx: &AgoraContext) -> anyhow::Result { OperationDefinition::Mutation(_) => bail!("Mutations not yet supported"), OperationDefinition::Subscription(_) => bail!("Subscriptions not yet supported"), }) - .collect::>>>()?; + .collect::>>>()?; Ok(selection_sets.into_iter().map(|set| set.items.len()).sum()) } diff --git a/graph-gateway/src/config.rs b/graph-gateway/src/config.rs index 346bd0e7..9ef617fc 100644 --- a/graph-gateway/src/config.rs +++ b/graph-gateway/src/config.rs @@ -29,6 +29,10 @@ pub struct Config { /// IPFS endpoint with access to the subgraph files #[serde_as(as = "DisplayFromStr")] pub ipfs: Url, + /// IP rate limit per window + pub ip_rate_limit: u16, + /// Duration of IP rate limiting window in seconds + pub ip_rate_limit_window_secs: u8, /// See https://github.com/confluentinc/librdkafka/blob/master/CONFIGURATION.md #[serde(default)] pub kafka: KafkaConfig, @@ -44,14 +48,6 @@ pub struct Config { pub port_metrics: u16, pub query_budget_discount: f64, pub query_budget_scale: f64, - /// Duration of API rate limiting window in seconds - pub rate_limit_api_window_secs: u8, - /// API rate limit per window - pub rate_limit_api_limit: u16, - /// Duration of IP rate limiting window in seconds - pub rate_limit_ip_window_secs: u8, - /// IP rate limit per window - pub rate_limit_ip_limit: u16, pub restricted_deployments: Option, /// Mnemonic for voucher signing #[serde_as(as = "DisplayFromStr")] diff --git a/graph-gateway/src/main.rs b/graph-gateway/src/main.rs index 4e08ec04..e4abc9c4 100644 --- a/graph-gateway/src/main.rs +++ b/graph-gateway/src/main.rs @@ -12,7 +12,6 @@ mod manifest_client; mod metrics; mod network_subgraph; mod price_automation; -mod rate_limiter; mod receipts; mod reports; mod studio_client; @@ -26,16 +25,16 @@ mod vouchers; use crate::{ auth::AuthHandler, chains::*, config::*, fisherman_client::*, geoip::GeoIP, indexer_client::IndexerClient, indexer_status::IndexingStatus, ipfs_client::*, - price_automation::QueryBudgetFactors, rate_limiter::*, receipts::ReceiptPools, - reports::KafkaClient, -}; -use actix_cors::Cors; -use actix_web::{ - dev::ServiceRequest, - http::{header, StatusCode}, - web, App, HttpResponse, HttpResponseBuilder, HttpServer, + price_automation::QueryBudgetFactors, receipts::ReceiptPools, reports::KafkaClient, }; use anyhow::{self, anyhow}; +use axum::{ + extract::{ConnectInfo, State}, + http::{self, header, status::StatusCode, HeaderMap, HeaderName, HeaderValue, Request}, + middleware, + response::Response, + routing, Json, Router, Server, +}; use eventuals::EventualExt as _; use graph_subscriptions::{eip712, TicketPayload}; use indexer_selection::{ @@ -56,12 +55,16 @@ use std::{ collections::{hash_map::Entry, HashMap, HashSet}, env, fs::read_to_string, + io::Write as _, + iter, + net::{IpAddr, Ipv4Addr, SocketAddr}, path::{Path, PathBuf}, sync::Arc, }; use tokio::spawn; +use tower_http::cors::{self, CorsLayer}; -#[actix_web::main] +#[tokio::main] async fn main() { let config_path = env::args() .nth(1) @@ -245,94 +248,72 @@ async fn main() { allocations: network_subgraph_data.allocations, }; - let metrics_port = config.port_metrics; // Host metrics on a separate server with a port that isn't open to public requests. - actix_web::rt::spawn(async move { - HttpServer::new(move || App::new().route("/metrics", web::get().to(handle_metrics))) - .workers(1) - .bind(("0.0.0.0", metrics_port)) - .expect("Failed to bind to metrics port") - .run() - .await - .expect("Failed to start metrics server") + let metrics_port = config.port_metrics; + spawn(async move { + let router = Router::new().route("/metrics", routing::get(handle_metrics)); + + Server::bind(&SocketAddr::new( + IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), + metrics_port, + )) + .serve(router.into_make_service()) + .await + .expect("Failed to start metrics server"); }); - let ip_rate_limiter = RateLimiter::::new( - config.rate_limit_ip_limit as usize, - config.rate_limit_ip_window_secs as usize, - ); - let api_rate_limiter = RateLimiter::::new( - config.rate_limit_api_limit as usize, - config.rate_limit_ip_window_secs as usize, + + let api_port = config.port_api; + let rate_limiter = create_rate_limiter( + config.ip_rate_limit as usize, + config.ip_rate_limit_window_secs as usize, ); - HttpServer::new(move || { - let cors = Cors::default() - .allow_any_origin() - .allow_any_header() - .allowed_methods(vec!["POST", "OPTIONS"]); - let api = web::scope("/api") - .wrap(cors) - .wrap(RateLimiterMiddleware { - rate_limiter: api_rate_limiter.clone(), - key: request_api_key, - }) - .app_data(web::Data::new(client_query_ctx.clone())) - .app_data(web::JsonConfig::default().error_handler(|err, _| { - actix_web::error::InternalError::from_response( - err, - graphql_error_response("Invalid query"), - ) - .into() - })) - .route( - "/{api_key}/subgraphs/id/{subgraph_id}", - web::post().to(client_query::handle_query), - ) - .route( - "/{api_key}/deployments/id/{deployment_id}", - web::post().to(client_query::handle_query), - ) - // We are omitting the subgraphs route here, since it's a footgun on the network. - // At some point we should deprecate the legacy subgraphs route above. - .route( - "/deployments/id/{deployment_id}", - web::post().to(client_query::handle_query), - ); - let other = web::scope("") - .wrap(RateLimiterMiddleware { - rate_limiter: ip_rate_limiter.clone(), - key: request_host, - }) - .route("/", web::get().to(|| async { "Ready to roll!" })) - .service( - web::resource("/ready") - .app_data(web::Data::new(ready_data.clone())) - .route(web::get().to(handle_ready)), - ) - .service( - web::resource("/collect-receipts") - // TODO: decrease payload limit - .app_data(web::PayloadConfig::new(16_000_000)) - .app_data(web::Data::new(signer_key)) - .route(web::post().to(vouchers::handle_collect_receipts)), - ) - .service( - web::resource("/partial-voucher") - .app_data(web::PayloadConfig::new(4_000_000)) - .app_data(web::Data::new(signer_key)) - .route(web::post().to(vouchers::handle_partial_voucher)), - ) - .service( - web::resource("/voucher") - .app_data(web::Data::new(signer_key)) - .route(web::post().to(vouchers::handle_voucher)), - ); - App::new().service(api).service(other) - }) - .bind(("0.0.0.0", config.port_api)) - .expect("Failed to bind") - .run() + let api = Router::new() + .route( + "/deployments/id/:deployment_id", + routing::post(client_query::handle_query), + ) + .route( + "/:api_key/deployments/id/:deployment_id", + routing::post(client_query::handle_query), + ) + // This subgraphs route is a footgun on the network. We should eventually deprecate it. + .route( + "/:api_key/subgraphs/id/:subgraph_id", + routing::post(client_query::handle_query), + ) + .with_state(client_query_ctx) + .layer( + CorsLayer::new() + .allow_origin(cors::Any) + .allow_headers(cors::Any) + .allow_methods([http::Method::POST]), + ); + + let router = Router::new() + .route("/", routing::get(|| async { "Ready to roll!" })) + .route("/ready", routing::get(handle_ready).with_state(ready_data)) + .route( + "/collect-receipts", + routing::post(vouchers::handle_collect_receipts).with_state(signer_key), + ) + .route( + "/partial-voucher", + routing::post(vouchers::handle_partial_voucher).with_state(signer_key), + ) + .route( + "/voucher", + routing::post(vouchers::handle_voucher).with_state(signer_key), + ) + .nest("/api", api) + .layer(middleware::from_fn_with_state(rate_limiter, ip_rate_limit)); + + Server::bind(&SocketAddr::new( + IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), + api_port, + )) + .serve(router.into_make_service_with_connect_info::()) .await - .expect("Failed to start server"); + .expect("Failed to start API server"); } fn load_restricted_deployments( @@ -364,23 +345,24 @@ where .forever(); } -fn request_api_key(request: &ServiceRequest) -> String { - format!( - "{}/{}", - request_host(request), - request.match_info().get("api_key").unwrap_or("") - ) +fn create_rate_limiter(limit: usize, slots: usize) -> &'static RateLimiter { + let rate_limiter = Box::leak(Box::new(RateLimiter::::new(limit, slots))); + eventuals::timer(Duration::from_secs(1)) + .pipe(|_| rate_limiter.rotate_slots()) + .forever(); + rate_limiter } -fn request_host(request: &ServiceRequest) -> String { - let info = request.connection_info(); - info.realip_remote_addr() - .map(|addr| - // Trim port number - &addr[0..addr.rfind(':').unwrap_or(addr.len())]) - // Fallback to hostname - .unwrap_or_else(|| info.host()) - .to_string() +async fn ip_rate_limit( + State(limiter): State<&'static RateLimiter>, + ConnectInfo(info): ConnectInfo, + req: Request, + next: middleware::Next, +) -> Result { + if limiter.check_limited(info.ip().to_string()) { + return Err(graphql_error_response("Too many requests, try again later")); + } + Ok(next.run(req).await) } async fn write_indexer_inputs( @@ -452,16 +434,17 @@ async fn write_indexer_inputs( let _ = update_writer.write(Update::Indexers(indexers)); } -async fn handle_metrics() -> HttpResponse { +async fn handle_metrics() -> impl axum::response::IntoResponse { let encoder = prometheus::TextEncoder::new(); let metric_families = prometheus::gather(); - let mut buffer = vec![]; + let mut buffer = Vec::new(); if let Err(metrics_encode_err) = encoder.encode(&metric_families, &mut buffer) { tracing::error!(%metrics_encode_err); - return HttpResponseBuilder::new(StatusCode::INTERNAL_SERVER_ERROR) - .body("Failed to encode metrics"); + buffer.clear(); + write!(&mut buffer, "Failed to encode metrics").unwrap(); + return (StatusCode::INTERNAL_SERVER_ERROR, buffer); } - HttpResponseBuilder::new(StatusCode::OK).body(buffer) + (StatusCode::OK, buffer) } #[derive(Clone)] @@ -471,7 +454,7 @@ struct ReadyData { allocations: Eventual>>, } -async fn handle_ready(data: web::Data) -> HttpResponse { +async fn handle_ready(State(data): State) -> impl axum::response::IntoResponse { // Wait for 30 seconds since startup for subgraph manifests to load. let timer_ready = data.start_time.elapsed() > Duration::from_secs(30); let block_caches_ready = data @@ -485,15 +468,29 @@ async fn handle_ready(data: web::Data) -> HttpResponse { .unwrap_or(0) > 0; if timer_ready && block_caches_ready && allocations_ready { - HttpResponseBuilder::new(StatusCode::OK).body("Ready") + (StatusCode::OK, "Ready") } else { // Respond with 425 Too Early - HttpResponseBuilder::new(StatusCode::from_u16(425).unwrap()).body("Not ready") + (StatusCode::from_u16(425).unwrap(), "Not ready") } } -pub fn graphql_error_response(message: S) -> HttpResponse { - HttpResponseBuilder::new(StatusCode::OK) - .insert_header(header::ContentType::json()) - .body(json!({"errors": {"message": message.to_string()}}).to_string()) +pub type JsonResponse = (HeaderMap, Json); + +pub fn json_response(headers: H, payload: serde_json::Value) -> JsonResponse +where + H: IntoIterator, +{ + let headers = HeaderMap::from_iter( + iter::once(( + header::CONTENT_TYPE, + HeaderValue::from_static("application/json"), + )) + .chain(headers), + ); + (headers, Json(payload)) +} + +pub fn graphql_error_response(message: S) -> JsonResponse { + json_response([], json!({"errors": {"message": message.to_string()}})) } diff --git a/graph-gateway/src/rate_limiter.rs b/graph-gateway/src/rate_limiter.rs deleted file mode 100644 index 19ac25af..00000000 --- a/graph-gateway/src/rate_limiter.rs +++ /dev/null @@ -1,79 +0,0 @@ -use crate::graphql_error_response; -use actix_web::dev::{Service, ServiceRequest, ServiceResponse, Transform}; -use eventuals::EventualExt; -use futures_util::future::{FutureExt as _, LocalBoxFuture}; -use prelude::*; -use simple_rate_limiter::RateLimiter; -use std::{ - future::{self, Ready}, - rc::Rc, - sync::Arc, - task::{Context, Poll}, -}; - -pub struct RateLimiterMiddleware { - pub rate_limiter: Arc>, - pub key: fn(&ServiceRequest) -> String, -} - -pub struct RateLimiterService { - service: Rc, - rate_limiter: Arc>, - key: fn(&ServiceRequest) -> String, -} - -impl Transform for RateLimiterMiddleware -where - S: Service + 'static, -{ - type Response = ServiceResponse; - type Error = S::Error; - type InitError = (); - type Transform = RateLimiterService; - type Future = Ready>; - - fn new_transform(&self, service: S) -> Self::Future { - let rate_limiter = self.rate_limiter.clone(); - eventuals::timer(Duration::from_secs(1)) - .pipe(move |_| rate_limiter.rotate_slots()) - .forever(); - future::ready(Ok(RateLimiterService { - service: Rc::new(service), - rate_limiter: self.rate_limiter.clone(), - key: self.key, - })) - } -} - -impl Service for RateLimiterService -where - S: Service + 'static, -{ - type Response = ServiceResponse; - type Error = S::Error; - type Future = LocalBoxFuture<'static, Result>; - - fn poll_ready(&self, ctx: &mut Context<'_>) -> Poll> { - self.service.poll_ready(ctx) - } - - #[tracing::instrument(skip_all)] - fn call(&self, request: ServiceRequest) -> Self::Future { - let service = Rc::clone(&self.service); - let rate_limiter = self.rate_limiter.clone(); - let f = self.key; - async move { - let key = f(&request); - let rate_limited = rate_limiter.check_limited(key.clone()); - tracing::trace!(%key, %rate_limited); - if rate_limited { - return Ok(ServiceResponse::new( - request.into_parts().0, - graphql_error_response("Too many requests, try again later"), - )); - } - service.call(request).await - } - .boxed_local() - } -} diff --git a/graph-gateway/src/vouchers.rs b/graph-gateway/src/vouchers.rs index 81305290..f5bc6abf 100644 --- a/graph-gateway/src/vouchers.rs +++ b/graph-gateway/src/vouchers.rs @@ -1,5 +1,5 @@ -use crate::metrics::*; -use actix_web::{http::StatusCode, web, HttpResponse, HttpResponseBuilder}; +use crate::{json_response, metrics::*, JsonResponse}; +use axum::{body::Bytes, extract::State, http::StatusCode}; use indexer_selection::{ receipts::{self, combine_partial_vouchers, receipts_to_partial_voucher, receipts_to_voucher}, SecretKey, @@ -16,27 +16,24 @@ lazy_static! { } pub async fn handle_collect_receipts( - data: web::Data, - payload: web::Bytes, -) -> HttpResponse { + State(signer): State, + payload: Bytes, +) -> Result { let _timer = METRICS.collect_receipts.duration.start_timer(); - match process_oneshot_voucher(&data, &payload) { + match process_oneshot_voucher(&signer, &payload) { Ok(response) => { METRICS.collect_receipts.ok.inc(); - response + Ok(response) } Err(collect_receipts_err) => { METRICS.collect_receipts.err.inc(); tracing::info!(%collect_receipts_err); - HttpResponseBuilder::new(StatusCode::BAD_REQUEST).body(collect_receipts_err) + Err((StatusCode::BAD_REQUEST, collect_receipts_err)) } } } -fn process_oneshot_voucher( - signer: &SecretKey, - payload: &web::Bytes, -) -> Result { +fn process_oneshot_voucher(signer: &SecretKey, payload: &Bytes) -> Result { let (allocation_id, receipts) = parse_receipts(payload)?; let allocation_signer = PublicKey::from_secret_key(&SECP256K1, signer); let voucher = receipts_to_voucher(&allocation_id, &allocation_signer, signer, receipts) @@ -52,35 +49,35 @@ fn process_oneshot_voucher( tracing::error!(excessive_voucher_fees = %voucher.fees); return Err("Voucher value too large".into()); } - Ok(HttpResponseBuilder::new(StatusCode::OK).json(json!({ - "allocation": format!("0x{}", hex::encode(voucher.allocation_id)), - "amount": voucher.fees.to_string(), - "signature": format!("0x{}", hex::encode(voucher.signature)), - }))) + Ok(json_response( + [], + json!({ + "allocation": format!("0x{}", hex::encode(voucher.allocation_id)), + "amount": voucher.fees.to_string(), + "signature": format!("0x{}", hex::encode(voucher.signature)), + }), + )) } pub async fn handle_partial_voucher( - data: web::Data, - payload: web::Bytes, -) -> HttpResponse { + State(signer): State, + payload: Bytes, +) -> Result { let _timer = METRICS.partial_voucher.duration.start_timer(); - match process_partial_voucher(&data, &payload) { + match process_partial_voucher(&signer, &payload) { Ok(response) => { METRICS.partial_voucher.ok.inc(); - response + Ok(response) } Err(partial_voucher_err) => { METRICS.partial_voucher.err.inc(); tracing::info!(%partial_voucher_err); - HttpResponseBuilder::new(StatusCode::BAD_REQUEST).body(partial_voucher_err) + Err((StatusCode::BAD_REQUEST, partial_voucher_err)) } } } -fn process_partial_voucher( - signer: &SecretKey, - payload: &web::Bytes, -) -> Result { +fn process_partial_voucher(signer: &SecretKey, payload: &Bytes) -> Result { let (allocation_id, receipts) = parse_receipts(payload)?; let allocation_signer = PublicKey::from_secret_key(&SECP256K1, signer); let partial_voucher = @@ -97,31 +94,37 @@ fn process_partial_voucher( tracing::error!(excessive_voucher_fees = %partial_voucher.voucher.fees); return Err("Voucher value too large".into()); } - Ok(HttpResponseBuilder::new(StatusCode::OK).json(json!({ - "allocation": format!("0x{}", hex::encode(partial_voucher.voucher.allocation_id)), - "fees": partial_voucher.voucher.fees.to_string(), - "signature": format!("0x{}", hex::encode(partial_voucher.voucher.signature)), - "receipt_id_min": format!("0x{}", hex::encode(partial_voucher.receipt_id_min)), - "receipt_id_max": format!("0x{}", hex::encode(partial_voucher.receipt_id_max)), - }))) + Ok(json_response( + [], + json!({ + "allocation": format!("0x{}", hex::encode(partial_voucher.voucher.allocation_id)), + "fees": partial_voucher.voucher.fees.to_string(), + "signature": format!("0x{}", hex::encode(partial_voucher.voucher.signature)), + "receipt_id_min": format!("0x{}", hex::encode(partial_voucher.receipt_id_min)), + "receipt_id_max": format!("0x{}", hex::encode(partial_voucher.receipt_id_max)), + }), + )) } -pub async fn handle_voucher(data: web::Data, payload: web::Bytes) -> HttpResponse { +pub async fn handle_voucher( + State(signer): State, + payload: Bytes, +) -> Result { let _timer = METRICS.voucher.duration.start_timer(); - match process_voucher(&data, &payload) { + match process_voucher(&signer, &payload) { Ok(response) => { METRICS.voucher.ok.inc(); - response + Ok(response) } Err(voucher_err) => { METRICS.voucher.err.inc(); tracing::info!(%voucher_err); - HttpResponseBuilder::new(StatusCode::BAD_REQUEST).body(voucher_err) + Err((StatusCode::BAD_REQUEST, voucher_err)) } } } -fn process_voucher(signer: &SecretKey, payload: &web::Bytes) -> Result { +fn process_voucher(signer: &SecretKey, payload: &Bytes) -> Result { let request = serde_json::from_slice::(payload).map_err(|err| err.to_string())?; let allocation_id = request.allocation_id; @@ -151,11 +154,14 @@ fn process_voucher(signer: &SecretKey, payload: &web::Bytes) -> Result Result<([u8; 20], &[u8]), String> { diff --git a/indexer-selection/src/lib.rs b/indexer-selection/src/lib.rs index 5dd3b177..decf09ea 100644 --- a/indexer-selection/src/lib.rs +++ b/indexer-selection/src/lib.rs @@ -38,7 +38,9 @@ use std::{ sync::Arc, }; -pub type Context<'c> = cost_model::Context<'c, &'c str>; +// We have to use `String` instead of `&'c str` here because of compiler bug triggered when holding +// a context across an await. See https://github.com/rust-lang/rust/issues/71723 +pub type Context<'c> = cost_model::Context<'c, String>; #[derive(Clone, Debug)] pub struct Selection {