From 3eb63df791293a9da78886be93beb57867f25db9 Mon Sep 17 00:00:00 2001 From: liyukun Date: Mon, 11 Sep 2023 13:27:00 +0800 Subject: [PATCH 1/7] feat(wip): prepare importing secret key framework in keys command --- Cargo.lock | 2287 +++++++++-------- crates/relayer-cli/src/commands/keys/add.rs | 103 +- crates/relayer/Cargo.toml | 2 +- .../relayer/src/keyring/ed25519_key_pair.rs | 4 + .../relayer/src/keyring/secp256k1_key_pair.rs | 4 + .../relayer/src/keyring/signing_key_pair.rs | 4 + 6 files changed, 1319 insertions(+), 1085 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0156d75b..702df4781 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -22,7 +22,7 @@ dependencies = [ "arc-swap", "backtrace", "canonical-path", - "clap 3.2.23", + "clap 3.2.25", "color-eyre", "fs-err", "once_cell", @@ -53,9 +53,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -74,43 +74,42 @@ checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] name = "aes" -version = "0.7.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if 1.0.0", - "cipher 0.3.0", + "cipher", "cpufeatures", - "opaque-debug", ] [[package]] -name = "aes" -version = "0.8.2" +name = "ahash" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "cfg-if 1.0.0", - "cipher 0.4.3", - "cpufeatures", + "getrandom 0.2.10", + "once_cell", + "version_check", ] [[package]] name = "ahash" -version = "0.7.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ - "getrandom 0.2.8", + "cfg-if 1.0.0", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" dependencies = [ "memchr", ] @@ -130,6 +129,12 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "ammonia" version = "3.3.0" @@ -143,6 +148,12 @@ dependencies = [ "url", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -152,11 +163,59 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" + +[[package]] +name = "anstyle-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + [[package]] name = "anyhow" -version = "1.0.72" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "arbitrary" @@ -172,11 +231,20 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +[[package]] +name = "array-init" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23589ecb866b460d3a0f1278834750268c607e8e28a1b982c907219f3178cd72" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "ascii" @@ -212,18 +280,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -236,7 +304,7 @@ dependencies = [ "futures-util", "log", "pin-project-lite", - "rustls-native-certs 0.6.2", + "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.23.4", "tungstenite 0.18.0", @@ -266,9 +334,9 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8c1df849285fbacd587de7818cc7d13be6cd2cbcd47a04fb1801b0e2706e33" +checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", "proc-macro2", @@ -311,13 +379,13 @@ dependencies = [ [[package]] name = "axum" -version = "0.6.7" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fb79c228270dcf2426e74864cabc94babb5dbab01a4314e702d2f16540e1591" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", "axum-core", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http", @@ -333,16 +401,15 @@ dependencies = [ "serde", "sync_wrapper", "tower", - "tower-http", "tower-layer", "tower-service", ] [[package]] name = "axum-core" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ "async-trait", "bytes", @@ -357,9 +424,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -390,9 +457,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" [[package]] name = "base64ct" @@ -400,12 +467,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bech32" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1" - [[package]] name = "bech32" version = "0.8.1" @@ -418,22 +479,13 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bindgen" version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", @@ -492,14 +544,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bitvec" -version = "0.17.4" +name = "bitflags" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" -dependencies = [ - "either", - "radium 0.3.0", -] +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "bitvec" @@ -508,7 +556,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", - "radium 0.7.0", + "radium", "tap", "wyz", ] @@ -540,9 +588,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -568,14 +616,13 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a30d0edd9dd1c60ddb42b80341c7852f6f985279a5c1a83659dcb65899dec99" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" dependencies = [ "cc", "glob", "threadpool", - "which", "zeroize", ] @@ -605,19 +652,25 @@ name = "bs58" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bs58" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ - "sha2 0.9.9", + "sha2 0.10.7", + "tinyvec", ] [[package]] name = "bstr" -version = "1.3.0" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" dependencies = [ "memchr", - "once_cell", - "regex-automata", + "regex-automata 0.3.8", "serde", ] @@ -633,9 +686,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "byte-slice-cast" @@ -657,9 +710,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] @@ -695,15 +748,15 @@ dependencies = [ "eth2_ssz_derive", "eth2_ssz_types", "ethereum-types", - "smallvec", + "smallvec 1.11.0", "tree_hash", ] [[package]] name = "camino" -version = "1.1.3" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] @@ -716,9 +769,9 @@ checksum = "e6e9e01327e6c86e92ec72b1c798d4a94810f147209bbe3ffab6a86954937a6f" [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" dependencies = [ "serde", ] @@ -738,9 +791,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.15.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" dependencies = [ "camino", "cargo-platform", @@ -752,11 +805,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -784,7 +838,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" name = "check-guide" version = "0.1.0" dependencies = [ - "clap 3.2.23", + "clap 3.2.25", "ibc-relayer-cli", "lazy_static", "mdbook-template", @@ -794,15 +848,15 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877" dependencies = [ + "android-tzdata", "iana-time-zone", - "num-integer", "num-traits", "serde", - "winapi", + "windows-targets 0.48.5", ] [[package]] @@ -813,18 +867,9 @@ checksum = "cca491388666e04d7248af3f60f0c40cfb0991c72205595d7c396e3510207d1a" [[package]] name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array", -] - -[[package]] -name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -832,9 +877,9 @@ dependencies = [ [[package]] name = "cita_trie" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe7baab47f510f52ca8dc9c0eb9082020c627c7f22285bea30edc3511f7ee29" +checksum = "f8c3d2abadaa28e0d277f9f6d07a2052544f045d929cd4d6f7bcfb43567c9767" dependencies = [ "hasher", "parking_lot", @@ -869,7 +914,7 @@ version = "0.108.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "920f26cc48cadcaf6f7bcc3960fde9f9f355633b6361da8ef31e1e1c00fc8858" dependencies = [ - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", ] [[package]] @@ -884,7 +929,7 @@ version = "0.108.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aac31177b0a8bf3acd563c042775e40494e437b2bbbae96ac2473eec3a4da95d" dependencies = [ - "ckb-fixed-hash", + "ckb-fixed-hash 0.108.0", "faster-hex 0.6.1", "lazy_static", "rand 0.7.3", @@ -921,8 +966,18 @@ version = "0.108.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00cbbc455b23748b32e06d16628a03e30d56ffa057f17093fdf5b42d4fb6c879" dependencies = [ - "ckb-fixed-hash-core", - "ckb-fixed-hash-macros", + "ckb-fixed-hash-core 0.108.0", + "ckb-fixed-hash-macros 0.108.0", +] + +[[package]] +name = "ckb-fixed-hash" +version = "0.110.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5072b9497962b0d0f64d2894081aee85f84a72e0dbda4bb6511a5fc50256e92" +dependencies = [ + "ckb-fixed-hash-core 0.110.1", + "ckb-fixed-hash-macros 0.110.1", ] [[package]] @@ -936,13 +991,36 @@ dependencies = [ "thiserror", ] +[[package]] +name = "ckb-fixed-hash-core" +version = "0.110.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa3b9a17c00132cfa9d414d091a8ec7c3fd7b711056140b9771d3429192e1a37" +dependencies = [ + "faster-hex 0.6.1", + "serde", + "thiserror", +] + [[package]] name = "ckb-fixed-hash-macros" version = "0.108.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cfc980ef88c217825172eb46df269f47890f5e78a38214416f13b3bd17a4b4" dependencies = [ - "ckb-fixed-hash-core", + "ckb-fixed-hash-core 0.108.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ckb-fixed-hash-macros" +version = "0.110.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0152fab35135f64a05ec83b36320e2d36f168e99b4b7e132e3b46a3b35d2b131" +dependencies = [ + "ckb-fixed-hash-core 0.110.1", "proc-macro2", "quote", "syn 1.0.109", @@ -1142,7 +1220,7 @@ checksum = "8b201220ac5762353f9313fbbc3c4cee2a6a924c16c17df51517644991575cc1" dependencies = [ "anyhow", "bech32 0.8.1", - "bitflags", + "bitflags 1.3.2", "bytes", "ckb-crypto", "ckb-dao-utils", @@ -1204,7 +1282,7 @@ dependencies = [ "bytes", "ckb-channel", "ckb-error", - "ckb-fixed-hash", + "ckb-fixed-hash 0.108.0", "ckb-hash 0.108.0", "ckb-merkle-mountain-range", "ckb-occupied-capacity", @@ -1254,9 +1332,9 @@ checksum = "4af800ae2b6c54b70efa398dab015a09a52eeac2dd1ac3ad32c9bbe224974225" [[package]] name = "clang-sys" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", @@ -1265,15 +1343,15 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.23" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "atty", - "bitflags", + "bitflags 1.3.2", "clap_derive", "clap_lex 0.2.4", - "indexmap 1.9.2", + "indexmap 1.9.3", "once_cell", "strsim", "termcolor", @@ -1282,17 +1360,24 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6" dependencies = [ - "bitflags", - "clap_lex 0.3.2", - "is-terminal", - "once_cell", + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08" +dependencies = [ + "anstream", + "anstyle", + "clap_lex 0.5.1", "strsim", - "termcolor", - "terminal_size 0.2.5", + "terminal_size", ] [[package]] @@ -1301,23 +1386,23 @@ version = "3.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f7a2e0a962c45ce25afce14220bc24f9dade0a1787f185cecf96bfba7847cd8" dependencies = [ - "clap 3.2.23", + "clap 3.2.25", ] [[package]] name = "clap_complete" -version = "4.1.4" +version = "4.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +checksum = "4110a1e6af615a9e6d0a36f805d5c99099f8bab9b8042f5bc1fa220a4a89e36f" dependencies = [ - "clap 4.1.8", + "clap 4.4.2", ] [[package]] name = "clap_derive" -version = "3.2.18" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" dependencies = [ "heck", "proc-macro-error", @@ -1337,75 +1422,58 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" [[package]] name = "coins-bip32" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30a84aab436fcb256a2ab3c80663d8aec686e6bae12827bb05fef3e1e439c9f" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" dependencies = [ - "bincode", - "bs58", + "bs58 0.5.0", "coins-core", - "digest 0.10.6", - "getrandom 0.2.8", + "digest 0.10.7", "hmac", "k256 0.13.1", - "lazy_static", "serde", - "sha2 0.10.6", + "sha2 0.10.7", "thiserror", ] [[package]] name = "coins-bip39" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f4d04ee18e58356accd644896aeb2094ddeafb6a713e056cef0c0a8e468c15" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ - "bitvec 0.17.4", + "bitvec", "coins-bip32", - "getrandom 0.2.8", "hmac", "once_cell", - "pbkdf2 0.12.1", + "pbkdf2 0.12.2", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.7", "thiserror", ] [[package]] name = "coins-core" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b949a1c63fb7eb591eb7ba438746326aedf0ae843e51ec92ba6bec5bb382c4f" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "base64 0.21.0", - "bech32 0.7.3", - "bs58", - "digest 0.10.6", + "base64 0.21.3", + "bech32 0.9.1", + "bs58 0.5.0", + "digest 0.10.7", "generic-array", "hex", "ripemd", "serde", "serde_derive", - "sha2 0.10.6", + "sha2 0.10.7", "sha3", "thiserror", ] @@ -1437,6 +1505,12 @@ dependencies = [ "tracing-error", ] +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "compare_fields" version = "0.2.0" @@ -1453,37 +1527,34 @@ dependencies = [ [[package]] name = "console" -version = "0.14.1" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", "libc", - "regex", - "terminal_size 0.1.17", "unicode-width", - "winapi", + "windows-sys 0.45.0", ] [[package]] -name = "console" -version = "0.15.5" +name = "const-hex" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +checksum = "08849ed393c907c90016652a01465a12d86361cd38ad2a7de026c56a520cc259" dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.42.0", + "cfg-if 1.0.0", + "cpufeatures", + "hex", + "serde", ] [[package]] name = "const-oid" -version = "0.9.2" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "constant_time_eq" @@ -1508,15 +1579,6 @@ 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" @@ -1529,15 +1591,15 @@ 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 = "cpufeatures" -version = "0.2.5" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] @@ -1563,12 +1625,12 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.15", + "crossbeam-utils 0.8.16", ] [[package]] @@ -1579,18 +1641,18 @@ checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if 1.0.0", "crossbeam-epoch", - "crossbeam-utils 0.8.15", + "crossbeam-utils 0.8.16", ] [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" dependencies = [ "autocfg", "cfg-if 1.0.0", - "crossbeam-utils 0.8.15", + "crossbeam-utils 0.8.16", "memoffset", "scopeguard", ] @@ -1608,9 +1670,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if 1.0.0", ] @@ -1635,9 +1697,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -1680,7 +1742,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.3", + "cipher", ] [[package]] @@ -1715,50 +1777,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "cxx" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 1.0.109", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling" version = "0.13.4" @@ -1804,7 +1822,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1826,22 +1844,28 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core 0.20.3", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] name = "dashmap" -version = "5.4.0" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.12.3", + "hashbrown 0.14.0", "lock_api", "once_cell", "parking_lot_core", ] +[[package]] +name = "data-encoding" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + [[package]] name = "deflate" version = "1.0.0" @@ -1863,9 +1887,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.5" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e58dffcdcc8ee7b22f0c1f71a69243d7c2d9ad87b5a14361f2424a1565c219" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", "zeroize", @@ -1904,7 +1928,7 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case 0.4.0", + "convert_case", "proc-macro2", "quote", "rustc_version", @@ -1913,23 +1937,11 @@ dependencies = [ [[package]] name = "dialoguer" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9dd058f8b65922819fabb4a41e7d1964e56344042c26efbccd465202c23fa0c" -dependencies = [ - "console 0.14.1", - "lazy_static", - "tempfile", - "zeroize", -] - -[[package]] -name = "dialoguer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3c796f3b0b408d9fd581611b47fa850821fcb84aa640b83a3c1a5be2d691f2" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" dependencies = [ - "console 0.15.5", + "console", "shell-words", "tempfile", "zeroize", @@ -1952,16 +1964,25 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-next" version = "2.0.0" @@ -1972,6 +1993,18 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1991,15 +2024,15 @@ checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" [[package]] name = "dunce" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "dyn-clone" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" [[package]] name = "eaglesong" @@ -2021,15 +2054,16 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.6" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a48e5d537b8a30c0b023116d981b16334be1485af7ca68db3a2b7024cbc957fd" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ - "der 0.7.5", - "digest 0.10.6", - "elliptic-curve 0.13.4", + "der 0.7.8", + "digest 0.10.7", + "elliptic-curve 0.13.5", "rfc6979 0.4.0", "signature 2.1.0", + "spki", ] [[package]] @@ -2079,20 +2113,20 @@ dependencies = [ "derivation-path", "ed25519-dalek", "hmac", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elasticlunr-rs" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94d9c8df0fe6879ca12e7633fdfe467c503722cc981fc463703472d2b876448" +checksum = "41e83863a500656dfa214fee6682de9c5b9f03de6860fec531235ed2ae9f6571" dependencies = [ "regex", "serde", @@ -2109,7 +2143,7 @@ dependencies = [ "base16ct 0.1.1", "crypto-bigint 0.4.9", "der 0.6.1", - "digest 0.10.6", + "digest 0.10.7", "ff 0.12.1", "generic-array", "group 0.12.1", @@ -2121,28 +2155,28 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c71eaa367f2e5d556414a8eea812bc62985c879748d6403edabd9cb03f16e7" +checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" dependencies = [ "base16ct 0.2.0", - "crypto-bigint 0.5.2", - "digest 0.10.6", + "crypto-bigint 0.5.3", + "digest 0.10.7", "ff 0.13.0", "generic-array", "group 0.13.0", "pkcs8", "rand_core 0.6.4", - "sec1 0.7.1", + "sec1 0.7.3", "subtle", "zeroize", ] [[package]] name = "ena" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5d13ca2353ab7d0230988629def93914a8c4015f621f9b13ed2955614731d" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" dependencies = [ "log", ] @@ -2155,20 +2189,20 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "enr" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf56acd72bb22d2824e66ae8e9e5ada4d0de17a69c7fd35569dde2ada8ec9116" +checksum = "0be7b2ac146c1f99fe245c02d16af0696450d8e06c135db75e10eeb9e642c20d" dependencies = [ - "base64 0.13.1", + "base64 0.21.3", "bytes", "hex", "k256 0.13.1", @@ -2176,6 +2210,7 @@ dependencies = [ "rand 0.8.5", "rlp", "serde", + "serde-hex", "sha3", "zeroize", ] @@ -2226,22 +2261,22 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "erased-serde" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" dependencies = [ "serde", ] [[package]] name = "errno" -version = "0.2.8" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -2269,9 +2304,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ - "aes 0.8.2", + "aes", "ctr", - "digest 0.10.6", + "digest 0.10.7", "hex", "hmac", "pbkdf2 0.11.0", @@ -2279,7 +2314,7 @@ dependencies = [ "scrypt", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.7", "sha3", "thiserror", "uuid 0.8.2", @@ -2293,7 +2328,7 @@ dependencies = [ "cpufeatures", "lazy_static", "ring", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] @@ -2329,8 +2364,8 @@ version = "0.4.1" source = "git+https://github.com/synapseweb3/lighthouse?rev=2c246d6#2c246d68011f14a9ee959b8d75b1dcb5d30b2993" dependencies = [ "ethereum-types", - "itertools", - "smallvec", + "itertools 0.10.5", + "smallvec 1.11.0", ] [[package]] @@ -2355,7 +2390,7 @@ dependencies = [ "eth2_ssz", "serde", "serde_derive", - "smallvec", + "smallvec 1.11.0", "tree_hash", "typenum", ] @@ -2444,9 +2479,9 @@ dependencies = [ [[package]] name = "ethers" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697aba1bec98cb86e7bebd69f9bb365218871464137af9e93e7a72bd6dc421d0" +checksum = "1ad13497f6e0a24292fc7b408e30d22fe9dc262da1f40d7b542c3a44e7fc0476" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -2460,9 +2495,9 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b603812e5e4d63521c691cbc1f34743879e96a1ee96c6594639d7fa0cf6fbc" +checksum = "c6e9e8acd0ed348403cc73a670c24daba3226c40b98dc1a41903766b3ab6240a" dependencies = [ "ethers-core", "once_cell", @@ -2472,16 +2507,16 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4e8ed7c2b2a22e07b65ae0eb426c948a7448f1be15c66e4813e02c423751fc9" +checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" dependencies = [ + "const-hex", "ethers-contract-abigen", "ethers-contract-derive", "ethers-core", "ethers-providers", "futures-util", - "hex", "once_cell", "pin-project", "serde", @@ -2491,17 +2526,16 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0984f4ec4e267fd27b7c9fa2f73e72c5c98491a73f777290654154d104f723" +checksum = "ce95a43c939b2e4e2f3191c5ad4a1f279780b8a39139c9905b43a7433531e2ab" dependencies = [ "Inflector", + "const-hex", "dunce", "ethers-core", "ethers-etherscan", "eyre", - "getrandom 0.2.8", - "hex", "prettyplease", "proc-macro2", "quote", @@ -2509,54 +2543,51 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 1.0.109", - "tokio", - "toml 0.7.6", - "url", + "syn 2.0.31", + "toml 0.7.7", "walkdir", ] [[package]] name = "ethers-contract-derive" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914e9211077a1b590af1ee6b8dfbd54515c808119546c95da69479908dc3d4de" +checksum = "8e9ce44906fc871b3ee8c69a695ca7ec7f70e50cb379c9b9cb5e532269e492f6" dependencies = [ + "Inflector", + "const-hex", "ethers-contract-abigen", "ethers-core", - "hex", "proc-macro2", "quote", - "syn 1.0.109", + "serde_json", + "syn 2.0.31", ] [[package]] name = "ethers-core" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40bf114f1017ace0f622f1652f59c2c5e1abfe7d88891cca0c43da979b351de0" +checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" dependencies = [ "arrayvec", "bytes", - "cargo_metadata 0.15.3", + "cargo_metadata 0.17.0", "chrono", - "convert_case 0.6.0", - "elliptic-curve 0.13.4", + "const-hex", + "elliptic-curve 0.13.5", "ethabi", "generic-array", - "getrandom 0.2.8", - "hex", "k256 0.13.1", "num_enum", "once_cell", "open-fastrlp", - "proc-macro2", "rand 0.8.5", "rlp", "serde", "serde_json", - "strum", - "syn 1.0.109", + "strum 0.25.0", + "syn 2.0.31", "tempfile", "thiserror", "tiny-keccak", @@ -2565,13 +2596,11 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8920b59cf81e357df2c8102d6a9dc81c2d68f7409543ff3b6868851ecf007807" +checksum = "0e53451ea4a8128fbce33966da71132cf9e1040dcfd2a2084fd7733ada7b2045" dependencies = [ "ethers-core", - "ethers-solc", - "getrandom 0.2.8", "reqwest", "semver", "serde", @@ -2582,9 +2611,9 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b30f67c1883ed68bd38aedbdd321831382c12e1b95089c8261c79bb85e4da" +checksum = "473f1ccd0c793871bbc248729fa8df7e6d2981d6226e4343e3bbaa9281074d5d" dependencies = [ "async-trait", "auto_impl", @@ -2609,25 +2638,25 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2fa0857eaad0c1678f982a2f4cfbe33ebd51d273cc93de0182b7c693f2a84a1" +checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" dependencies = [ "async-trait", "auto_impl", - "base64 0.21.0", + "base64 0.21.3", "bytes", + "const-hex", "enr", "ethers-core", "futures-channel", "futures-core", "futures-timer", "futures-util", - "getrandom 0.2.8", "hashers", - "hex", "http", "instant", + "jsonwebtoken", "once_cell", "pin-project", "reqwest", @@ -2635,7 +2664,7 @@ dependencies = [ "serde_json", "thiserror", "tokio", - "tokio-tungstenite 0.18.0", + "tokio-tungstenite 0.20.0", "tracing", "tracing-futures", "url", @@ -2647,35 +2676,35 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5caa7cad4f444931d0ed45818e609847781582399eff0be5c089e8666475c7fb" +checksum = "5ea44bec930f12292866166f9ddbea6aa76304850e4d8dcd66dc492b43d00ff1" dependencies = [ "async-trait", "coins-bip32", "coins-bip39", - "elliptic-curve 0.13.4", + "const-hex", + "elliptic-curve 0.13.5", "eth-keystore", "ethers-core", - "hex", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.7", "thiserror", "tracing", ] [[package]] name = "ethers-solc" -version = "2.0.2" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139542f51f4c405d0dd7e97c34232140a14e8744d1cf121777355567187259e4" +checksum = "de34e484e7ae3cab99fbfd013d6c5dc7f9013676a4e0e414d8b12e1213e8b3ba" dependencies = [ "cfg-if 1.0.0", + "const-hex", + "dirs", "dunce", "ethers-core", - "getrandom 0.2.8", "glob", - "hex", "home", "md-5", "num_cpus", @@ -2736,21 +2765,18 @@ checksum = "51e2ce894d53b295cf97b05685aa077950ff3e8541af83217fc720a6437169f8" [[package]] name = "faster-hex" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9042d281a5eec0f2387f8c3ea6c4514e2cf2732c90a85aaf383b761ee3b290d" +checksum = "239f7bfb930f820ab16a9cd95afc26f88264cf6905c960b340a615384aa3338a" dependencies = [ "serde", ] [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] name = "ff" @@ -2774,14 +2800,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.20" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", - "windows-sys 0.45.0", + "redox_syscall 0.3.5", + "windows-sys 0.48.0", ] [[package]] @@ -2805,9 +2831,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ "crc32fast", "miniz_oxide", @@ -2838,12 +2864,12 @@ dependencies = [ "anyhow", "async-stream", "bytes", - "ckb-fixed-hash", + "ckb-fixed-hash 0.108.0", "ckb-ics-axon 0.1.0 (git+https://github.com/synapseweb3/ckb-ics.git?rev=0a7f9eb)", "ckb-jsonrpc-types", "ckb-sdk", "ckb-types", - "faster-hex 0.8.0", + "faster-hex 0.8.1", "futures", "jsonrpc-utils", "rlp", @@ -2883,9 +2909,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] @@ -2997,7 +3023,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -3051,9 +3077,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -3073,9 +3099,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -3085,26 +3111,30 @@ dependencies = [ ] [[package]] -name = "gimli" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" - -[[package]] -name = "gitignore" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78aa90e4620c1498ac434c06ba6e521b525794bbdacf085d490cc794b4a2f9a4" -dependencies = [ - "glob", -] - -[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] name = "glob" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[package]] +name = "globset" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + [[package]] name = "gloo-timers" version = "0.2.6" @@ -3192,9 +3222,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.16" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -3202,7 +3232,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.2", + "indexmap 1.9.3", "slab", "tokio", "tokio-util", @@ -3217,9 +3247,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" -version = "4.3.6" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" +checksum = "c39b3bc2a8f715298032cf5087e58573809374b08160aa7d750582bdb82d2683" dependencies = [ "log", "pest", @@ -3235,7 +3265,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] @@ -3243,6 +3273,10 @@ name = "hashbrown" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +dependencies = [ + "ahash 0.8.3", + "allocator-api2", +] [[package]] name = "hasher" @@ -3264,30 +3298,29 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.12.3", + "hashbrown 0.14.0", ] [[package]] name = "hdpath" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dafb09e5d85df264339ad786a147d9de1da13687a3697c52244297e5e7c32d9c" +checksum = "dfa5bc9db2c17d2660f53ce217b778d06d68de13d1cd01c0f4e5de4b7918935f" dependencies = [ "byteorder", ] [[package]] name = "headers" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.1", - "bitflags", + "base64 0.21.3", "bytes", "headers-core", "http", @@ -3331,18 +3364,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] name = "hex" @@ -3356,16 +3380,16 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] name = "home" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -3404,12 +3428,6 @@ 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" @@ -3418,9 +3436,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -3440,9 +3458,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -3501,15 +3519,16 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" dependencies = [ + "futures-util", "http", "hyper", - "rustls 0.20.8", + "rustls 0.21.7", "tokio", - "tokio-rustls 0.23.4", + "tokio-rustls 0.24.1", ] [[package]] @@ -3539,26 +3558,25 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] @@ -3622,16 +3640,16 @@ dependencies = [ "axon-tools", "bech32 0.9.1", "bitcoin", - "bs58", + "bs58 0.4.0", "bytes", "ckb-hash 0.108.0", "ckb-ics-axon 0.1.0 (git+https://github.com/synapseweb3/ckb-ics.git?rev=56b09fa)", "ckb-jsonrpc-types", "ckb-sdk", "ckb-types", - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", "cstr_core", - "digest 0.10.6", + "digest 0.10.7", "dirs-next", "ed25519", "ed25519-dalek", @@ -3653,7 +3671,7 @@ dependencies = [ "ibc-relayer-storage", "ibc-relayer-types", "ibc-telemetry", - "itertools", + "itertools 0.10.5", "jsonrpc-core", "lazy_static", "moka", @@ -3674,9 +3692,9 @@ dependencies = [ "serde_derive", "serde_json", "serial_test", - "sha2 0.10.6", + "sha2 0.10.7", "signature 1.6.4", - "strum", + "strum 0.24.1", "subtle-encoding", "tempfile", "tendermint", @@ -3696,7 +3714,7 @@ dependencies = [ "tree_hash", "tree_hash_derive", "types", - "uuid 1.3.0", + "uuid 1.4.1", ] [[package]] @@ -3705,12 +3723,12 @@ version = "1.4.0" dependencies = [ "abscissa_core", "atty", - "clap 3.2.23", + "clap 3.2.25", "clap_complete 3.2.5", "color-eyre", - "console 0.15.5", - "crossbeam-channel 0.5.7", - "dialoguer 0.10.3", + "console", + "crossbeam-channel 0.5.8", + "dialoguer", "dirs-next", "eyre", "flex-error", @@ -3723,7 +3741,7 @@ dependencies = [ "ibc-relayer-rest", "ibc-relayer-types", "ibc-telemetry", - "itertools", + "itertools 0.10.5", "once_cell", "oneline-eyre", "regex", @@ -3743,7 +3761,7 @@ dependencies = [ name = "ibc-relayer-rest" version = "0.23.0" dependencies = [ - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", "ibc-relayer", "ibc-relayer-types", "rouille", @@ -3781,7 +3799,7 @@ dependencies = [ "hex", "ibc-proto", "ics23", - "itertools", + "itertools 0.10.5", "num-rational", "primitive-types", "prost", @@ -3789,7 +3807,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "strum", + "strum 0.24.1", "subtle-encoding", "tendermint", "tendermint-light-client-verifier", @@ -3861,9 +3879,9 @@ dependencies = [ name = "ibc-test-framework" version = "0.23.0" dependencies = [ - "ckb-fixed-hash", + "ckb-fixed-hash 0.110.1", "color-eyre", - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", "ethers", "eyre", "flex-error", @@ -3874,15 +3892,15 @@ dependencies = [ "ibc-relayer", "ibc-relayer-cli", "ibc-relayer-types", - "itertools", + "itertools 0.10.5", "prost", "rand 0.8.5", "semver", "serde", "serde_derive", "serde_json", - "serde_yaml 0.9.19", - "sha2 0.10.6", + "serde_yaml 0.9.25", + "sha2 0.10.7", "subtle-encoding", "tendermint-rpc", "tokio", @@ -3903,7 +3921,7 @@ dependencies = [ "hex", "prost", "ripemd", - "sha2 0.10.6", + "sha2 0.10.7", "sha3", ] @@ -3915,14 +3933,31 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + [[package]] name = "impl-codec" version = "0.6.0" @@ -3990,9 +4025,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[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 0.12.3", @@ -4010,25 +4045,13 @@ dependencies = [ "serde", ] -[[package]] -name = "indicatif" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" -dependencies = [ - "console 0.15.5", - "lazy_static", - "number_prefix", - "regex", -] - [[package]] name = "inotify" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" dependencies = [ - "bitflags", + "bitflags 1.3.2", "inotify-sys", "libc", ] @@ -4070,30 +4093,30 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ + "hermit-abi 0.3.2", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "ipnet" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.45.0", + "hermit-abi 0.3.2", + "rustix 0.38.11", + "windows-sys 0.48.0", ] [[package]] @@ -4105,11 +4128,20 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" @@ -4122,9 +4154,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] @@ -4166,7 +4198,21 @@ checksum = "8727d2c8bb2833f22c4306879a5cf4cc4a8659170c211e9b523b86aab654f823" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.3", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", ] [[package]] @@ -4178,7 +4224,7 @@ dependencies = [ "cfg-if 1.0.0", "ecdsa 0.14.8", "elliptic-curve 0.12.3", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] @@ -4188,27 +4234,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if 1.0.0", - "ecdsa 0.16.6", - "elliptic-curve 0.13.4", + "ecdsa 0.16.8", + "elliptic-curve 0.13.5", "once_cell", - "sha2 0.10.6", + "sha2 0.10.7", "signature 2.1.0", ] [[package]] name = "keccak" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" dependencies = [ "cpufeatures", ] [[package]] name = "kqueue" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" dependencies = [ "kqueue-sys", "libc", @@ -4216,31 +4262,30 @@ dependencies = [ [[package]] name = "kqueue-sys" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", ] [[package]] name = "lalrpop" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823" +checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" dependencies = [ "ascii-canvas", - "atty", "bit-set", "diff", "ena", - "itertools", + "is-terminal", + "itertools 0.10.5", "lalrpop-util", "petgraph", - "pico-args", "regex", - "regex-syntax", + "regex-syntax 0.7.5", "string_cache", "term", "tiny-keccak", @@ -4249,12 +4294,9 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4" -dependencies = [ - "regex", -] +checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" [[package]] name = "lazy_static" @@ -4295,15 +4337,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -4315,15 +4348,21 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -4331,9 +4370,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lru" @@ -4385,14 +4424,14 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] name = "matchit" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" [[package]] name = "maybe-uninit" @@ -4406,25 +4445,25 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] name = "mdbook" -version = "0.4.28" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "764dcbfc2e5f868bc1b566eb179dff1a06458fd0cff846aae2579392dd3f01a0" +checksum = "c55eb7c4dad20cc5bc15181c2aaf43d5689d5c3e0b80b50cc4cf0b7fe72a26d9" dependencies = [ "ammonia", "anyhow", "chrono", - "clap 4.1.8", - "clap_complete 4.1.4", + "clap 4.4.2", + "clap_complete 4.4.1", "elasticlunr-rs", "env_logger 0.10.0", "futures-util", - "gitignore", "handlebars", + "ignore", "log", "memchr", "notify", @@ -4450,7 +4489,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "920f69694a682c1100d64ca342278fc289d7d89b905a60c39ca39e0ea04ce0f1" dependencies = [ "anyhow", - "clap 3.2.23", + "clap 3.2.25", "env_logger 0.9.3", "fancy-regex", "lazy_static", @@ -4462,15 +4501,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memoffset" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] @@ -4497,32 +4536,32 @@ dependencies = [ [[package]] name = "metastruct" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734788dec2091fe9afa39530ca2ea7994f4a2c9aff3dbfebb63f2c1945c6f10b" +checksum = "ccfbb8826226b09b05bb62a0937cf6abb16f1f7d4b746eb95a83db14aec60f06" dependencies = [ "metastruct_macro", ] [[package]] name = "metastruct_macro" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ded15e7570c2a507a23e6c3a1c8d74507b779476e43afe93ddfc261d44173d" +checksum = "37cb4045d5677b7da537f8cb5d0730d5b6414e3cc81c61e4b50e1f0cbdc73909" dependencies = [ "darling 0.13.4", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", - "smallvec", + "smallvec 1.11.0", "syn 1.0.109", ] [[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 = "mime_guess" @@ -4542,34 +4581,34 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "moka" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d3b8e76a2e4b17de765db9432e377a171c42fbe0512b8bc860ff1bfe2e273b" +checksum = "0be0a3dd6fe7c99233c2b1476e703147fb7516c68dce585b19b51efc08fe93d8" dependencies = [ - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", "crossbeam-epoch", - "crossbeam-utils 0.8.15", + "crossbeam-utils 0.8.16", "num_cpus", "once_cell", "parking_lot", @@ -4577,11 +4616,11 @@ dependencies = [ "rustc_version", "scheduled-thread-pool", "skeptic", - "smallvec", + "smallvec 1.11.0", "tagptr", "thiserror", "triomphe", - "uuid 1.3.0", + "uuid 1.4.1", ] [[package]] @@ -4642,6 +4681,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nom" version = "7.1.3" @@ -4652,31 +4697,41 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "normpath" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "notify" -version = "5.1.0" +version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags", - "crossbeam-channel 0.5.7", + "bitflags 2.4.0", + "crossbeam-channel 0.5.8", "filetime", "fsevent-sys", "inotify", "kqueue", "libc", + "log", "mio", "walkdir", - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] name = "notify-debouncer-mini" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e23e9fa24f094b143c1eb61f90ac6457de87be6987bc70746e0179f7dbc9007b" +checksum = "e55ee272914f4563a2f8b8553eb6811f3c0caea81c756346bad15b7e3ef969f0" dependencies = [ - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", "notify", ] @@ -4692,9 +4747,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -4738,42 +4793,42 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.2", "libc", ] [[package]] name = "num_enum" -version = "0.5.11" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] @@ -4785,12 +4840,6 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "numext-constructor" version = "0.1.6" @@ -4839,18 +4888,18 @@ dependencies = [ [[package]] name = "object" -version = "0.30.3" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "oneline-eyre" @@ -4894,21 +4943,22 @@ dependencies = [ [[package]] name = "opener" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293c15678e37254c15bd2f092314abb4e51d7fdde05c2021279c12631b54f005" +checksum = "6c62dcb6174f9cb326eac248f07e955d5d559c272730b6c03e396b443b562788" dependencies = [ "bstr", + "normpath", "winapi", ] [[package]] name = "openssl" -version = "0.10.45" +version = "0.10.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" dependencies = [ - "bitflags", + "bitflags 2.4.0", "cfg-if 1.0.0", "foreign-types", "libc", @@ -4919,13 +4969,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] @@ -4936,11 +4986,10 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.80" +version = "0.9.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" dependencies = [ - "autocfg", "cc", "libc", "pkg-config", @@ -4977,7 +5026,7 @@ dependencies = [ "fnv", "futures-channel", "futures-util", - "indexmap 1.9.2", + "indexmap 1.9.3", "js-sys", "once_cell", "pin-project-lite", @@ -4991,7 +5040,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" dependencies = [ "async-trait", - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", "dashmap", "fnv", "futures-channel", @@ -5004,6 +5053,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-multimap" version = "0.4.3" @@ -5016,9 +5071,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" [[package]] name = "overload" @@ -5034,12 +5089,12 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "parity-scale-codec" -version = "3.4.0" +version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" +checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" dependencies = [ "arrayvec", - "bitvec 1.0.1", + "bitvec", "byte-slice-cast", "impl-trait-for-tuples", "parity-scale-codec-derive", @@ -5048,9 +5103,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.4" +version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" +checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5070,15 +5125,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.45.0", + "redox_syscall 0.3.5", + "smallvec 1.11.0", + "windows-targets 0.48.5", ] [[package]] @@ -5094,9 +5149,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "path-slash" @@ -5110,19 +5165,19 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "hmac", "password-hash", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] name = "pbkdf2" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "hmac", ] @@ -5159,27 +5214,37 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c719dcf55f09a3a7e764c6649ab594c18a177e3599c467983cdf644bfc0a4088" +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.5.6" +version = "2.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" +checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.5.6" +version = "2.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" dependencies = [ "pest", "pest_generator", @@ -5187,36 +5252,36 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.6" +version = "2.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] name = "pest_meta" -version = "2.5.6" +version = "2.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" dependencies = [ "once_cell", "pest", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 1.9.2", + "indexmap 2.0.0", ] [[package]] @@ -5249,12 +5314,12 @@ dependencies = [ [[package]] name = "phf" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ "phf_macros", - "phf_shared 0.11.1", + "phf_shared 0.11.2", ] [[package]] @@ -5299,25 +5364,25 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ - "phf_shared 0.11.1", + "phf_shared 0.11.2", "rand 0.8.5", ] [[package]] name = "phf_macros" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "phf_generator 0.11.1", - "phf_shared 0.11.1", + "phf_generator 0.11.2", + "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] @@ -5340,44 +5405,38 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 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" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] name = "pin-project-lite" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -5391,15 +5450,15 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.5", + "der 0.7.8", "spki", ] [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "plain" @@ -5421,12 +5480,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.1.25" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] @@ -5503,9 +5562,9 @@ dependencies = [ [[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", @@ -5513,12 +5572,12 @@ 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", + "itertools 0.10.5", "proc-macro2", "quote", "syn 1.0.109", @@ -5526,9 +5585,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ "prost", ] @@ -5541,22 +5600,22 @@ checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] name = "pulldown-cmark" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63" +checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" dependencies = [ - "bitflags", + "bitflags 1.3.2", "memchr", "unicase", ] [[package]] name = "quanta" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc73c42f9314c4bdce450c77e6f09ecbddefbeddb1b5979ded332a3913ded33" +checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" dependencies = [ - "crossbeam-utils 0.8.15", + "crossbeam-utils 0.8.16", "libc", "mach2", "once_cell", @@ -5570,9 +5629,9 @@ dependencies = [ name = "query-events" version = "0.1.0" dependencies = [ - "clap 3.2.23", + "clap 3.2.25", "futures", - "itertools", + "itertools 0.10.5", "tendermint", "tendermint-rpc", "tokio", @@ -5595,12 +5654,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" - [[package]] name = "radium" version = "0.7.0" @@ -5667,7 +5720,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", ] [[package]] @@ -5703,7 +5756,7 @@ version = "10.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -5722,9 +5775,9 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ - "crossbeam-channel 0.5.7", + "crossbeam-channel 0.5.8", "crossbeam-deque", - "crossbeam-utils 0.8.15", + "crossbeam-utils 0.8.16", "num_cpus", ] @@ -5734,7 +5787,16 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", ] [[package]] @@ -5743,44 +5805,62 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.8", - "redox_syscall", + "getrandom 0.2.10", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.7.1" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-automata 0.3.8", + "regex-syntax 0.7.5", ] [[package]] name = "regex-automata" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "reqwest" -version = "0.11.14" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" dependencies = [ - "base64 0.21.0", + "base64 0.21.3", "bytes", "encoding_rs", "futures-core", @@ -5789,7 +5869,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls 0.23.2", + "hyper-rustls 0.24.1", "hyper-tls", "ipnet", "js-sys", @@ -5800,20 +5880,20 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.20.8", - "rustls-pemfile 1.0.2", + "rustls 0.21.7", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-rustls 0.23.4", + "tokio-rustls 0.24.1", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.22.6", + "webpki-roots 0.25.2", "winreg", ] @@ -5912,7 +5992,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -5939,9 +6019,9 @@ dependencies = [ [[package]] name = "rouille" -version = "3.6.1" +version = "3.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f86e4c51a773f953f02bbab5fd049f004bfd384341d62da2a079aff812ab176" +checksum = "3716fbf57fc1084d7a706adf4e445298d123e4a44294c4e8213caf1b85fcc921" dependencies = [ "base64 0.13.1", "brotli", @@ -5949,13 +6029,12 @@ dependencies = [ "deflate", "filetime", "multipart", - "num_cpus", "percent-encoding", "rand 0.8.5", "serde", "serde_derive", "serde_json", - "sha1", + "sha1_smol", "threadpool", "time", "tiny_http", @@ -5968,12 +6047,12 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "fallible-iterator", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", - "smallvec", + "smallvec 1.11.0", ] [[package]] @@ -5988,9 +6067,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -6015,16 +6094,29 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.9" +version = "0.37.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", - "linux-raw-sys", - "windows-sys 0.45.0", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys 0.4.5", + "windows-sys 0.48.0", ] [[package]] @@ -6042,14 +6134,26 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +dependencies = [ + "log", + "ring", + "sct 0.7.0", + "webpki 0.22.1", +] + +[[package]] +name = "rustls" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ "log", "ring", + "rustls-webpki 0.101.4", "sct 0.7.0", - "webpki 0.22.0", ] [[package]] @@ -6066,45 +6170,56 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", - "rustls-pemfile 1.0.2", + "rustls-pemfile", "schannel", "security-framework", ] [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.13.1", + "base64 0.21.3", ] [[package]] -name = "rustls-pemfile" -version = "1.0.2" +name = "rustls-webpki" +version = "0.100.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" dependencies = [ - "base64 0.21.0", + "ring", + "untrusted", ] [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "safe-proc-macro2" @@ -6170,7 +6285,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher 0.4.3", + "cipher", ] [[package]] @@ -6184,9 +6299,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.3.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" +checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" dependencies = [ "cfg-if 1.0.0", "derive_more", @@ -6196,9 +6311,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.3.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" +checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6208,11 +6323,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] @@ -6232,15 +6347,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll" @@ -6271,7 +6380,7 @@ dependencies = [ "hmac", "pbkdf2 0.11.0", "salsa20", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] @@ -6309,12 +6418,12 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct 0.2.0", - "der 0.7.5", + "der 0.7.8", "generic-array", "pkcs8", "subtle", @@ -6354,11 +6463,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -6367,9 +6476,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -6377,9 +6486,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" dependencies = [ "serde", ] @@ -6398,18 +6507,29 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.185" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-hex" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca37e3e4d1b39afd7ff11ee4e947efae85adfddf4841787bfa47c470e96dc26d" +dependencies = [ + "array-init", + "serde", + "smallvec 0.6.14", +] + [[package]] name = "serde_bytes" -version = "0.11.9" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" dependencies = [ "serde", ] @@ -6426,20 +6546,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.185" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" dependencies = [ "itoa", "ryu", @@ -6448,13 +6568,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.11" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" +checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] @@ -6494,10 +6614,10 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" dependencies = [ - "base64 0.21.0", + "base64 0.21.3", "chrono", "hex", - "indexmap 1.9.2", + "indexmap 1.9.3", "indexmap 2.0.0", "serde", "serde_json", @@ -6526,7 +6646,7 @@ dependencies = [ "darling 0.20.3", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -6535,7 +6655,7 @@ version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ - "indexmap 1.9.2", + "indexmap 1.9.3", "ryu", "serde", "yaml-rust", @@ -6543,11 +6663,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.19" +version = "0.9.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82e6c8c047aa50a7328632d067bcae6ef38772a79e28daf32f735e0e4f3dd10" +checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" dependencies = [ - "indexmap 1.9.2", + "indexmap 2.0.0", "itoa", "ryu", "serde", @@ -6579,17 +6699,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "sha-1" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.6", -] - [[package]] name = "sha1" version = "0.10.5" @@ -6598,9 +6707,15 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + [[package]] name = "sha2" version = "0.9.9" @@ -6616,22 +6731,22 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "keccak", ] @@ -6652,9 +6767,9 @@ checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook" @@ -6681,7 +6796,7 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -6691,7 +6806,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -6701,11 +6816,23 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc47a29ce97772ca5c927f75bac34866b16d64e07f330c3248e2d7226623901b" +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "skeptic" @@ -6724,9 +6851,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -6739,9 +6866,18 @@ checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" [[package]] name = "smallvec" -version = "1.10.0" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" +dependencies = [ + "maybe-uninit", +] + +[[package]] +name = "smallvec" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "socket2" @@ -6765,14 +6901,15 @@ dependencies = [ [[package]] name = "solang-parser" -version = "0.2.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff87dae6cdccacdbf3b19e99b271083556e808de0f59c74a01482f64fdbc61fc" +checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" dependencies = [ - "itertools", + "itertools 0.11.0", "lalrpop", "lalrpop-util", - "phf 0.11.1", + "phf 0.11.2", + "thiserror", "unicode-xid", ] @@ -6800,7 +6937,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", - "der 0.7.5", + "der 0.7.8", ] [[package]] @@ -6811,9 +6948,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_cache" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d69e88b23f23030bf4d0e9ca7b07434f70e1c1f4d3ca7e93ce958b373654d9f" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", @@ -6847,7 +6984,16 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros", + "strum_macros 0.24.3", +] + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.2", ] [[package]] @@ -6863,11 +7009,24 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.31", +] + [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "subtle-encoding" @@ -6891,40 +7050,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b9e5728aa1a87141cefd4e7509903fc01fa0dcb108022b1e841a67c5159fc5" dependencies = [ "darling 0.13.4", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", - "smallvec", + "smallvec 1.11.0", "syn 1.0.109", ] [[package]] name = "svm-rs" -version = "0.2.22" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01afefe60c02f4a2271fb15d1965c37856712cebb338330b06649d12afec42df" +checksum = "597e3a746727984cb7ea2487b6a40726cad0dbe86628e7d429aa6b8c4c153db4" dependencies = [ - "anyhow", - "cfg-if 1.0.0", - "clap 3.2.23", - "console 0.14.1", - "dialoguer 0.8.0", + "dirs", "fs2", "hex", - "home", - "indicatif", - "itertools", "once_cell", - "rand 0.8.5", "reqwest", "semver", "serde", "serde_json", - "sha2 0.9.9", - "tempfile", + "sha2 0.10.7", "thiserror", - "tokio", - "tracing", "url", "zip", ] @@ -6951,9 +7099,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.29" +version = "2.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" dependencies = [ "proc-macro2", "quote", @@ -6992,24 +7140,24 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "task-local-extensions" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4167afbec18ae012de40f8cf1b9bf48420abb390678c34821caa07d924941cc4" +checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" dependencies = [ - "tokio", + "pin-utils", ] [[package]] name = "tempfile" -version = "3.4.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ "cfg-if 1.0.0", "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.42.0", + "redox_syscall 0.3.5", + "rustix 0.38.11", + "windows-sys 0.48.0", ] [[package]] @@ -7019,7 +7167,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b90c3c1e32352551f0f1639ce765e4c66ce250c733d4b9ba1aff81130437465c" dependencies = [ "bytes", - "digest 0.10.6", + "digest 0.10.7", "ed25519", "ed25519-consensus", "flex-error", @@ -7034,7 +7182,7 @@ dependencies = [ "serde_bytes", "serde_json", "serde_repr", - "sha2 0.10.6", + "sha2 0.10.7", "signature 1.6.4", "subtle", "subtle-encoding", @@ -7121,7 +7269,7 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom 0.2.8", + "getrandom 0.2.10", "http", "hyper", "hyper-proxy", @@ -7194,29 +7342,19 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "terminal_size" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9afddd2cec1c0909f06b00ef33f94ab2cc0578c4a610aa208ddfec8aa2b43a" +checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237" dependencies = [ - "rustix", - "windows-sys 0.45.0", + "rustix 0.37.23", + "windows-sys 0.48.0", ] [[package]] name = "test-log" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f0c854faeb68a048f0f2dc410c5ddae3bf83854ef0e4977d58306a5edef50e" +checksum = "d9601d162c1d77e62c1ea0bc8116cd1caf143ce3af947536c3c9052a1677fe0c" dependencies = [ "proc-macro2", "quote", @@ -7240,22 +7378,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -7279,9 +7417,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ "itoa", "libc", @@ -7299,9 +7437,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" dependencies = [ "time-core", ] @@ -7318,7 +7456,7 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash", - "sha2 0.10.6", + "sha2 0.10.7", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -7398,7 +7536,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -7428,16 +7566,26 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.20.8", + "rustls 0.20.9", + "tokio", + "webpki 0.22.1", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.7", "tokio", - "webpki 0.22.0", ] [[package]] name = "tokio-stream" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite", @@ -7446,37 +7594,36 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.17.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" +checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" dependencies = [ "futures-util", "log", "tokio", - "tungstenite 0.17.3", + "tungstenite 0.18.0", ] [[package]] name = "tokio-tungstenite" -version = "0.18.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" +checksum = "2b2dbec703c26b00d74844519606ef15d09a7d6857860f84ad223dec002ddea2" dependencies = [ "futures-util", "log", - "rustls 0.20.8", + "rustls 0.21.7", "tokio", - "tokio-rustls 0.23.4", - "tungstenite 0.18.0", - "webpki 0.22.0", - "webpki-roots 0.22.6", + "tokio-rustls 0.24.1", + "tungstenite 0.20.0", + "webpki-roots 0.23.1", ] [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -7497,9 +7644,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "de0a3ab2091e52d7299a39d098e200114a972df0a7724add02a273aa9aada592" dependencies = [ "serde", "serde_spanned", @@ -7518,9 +7665,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.0.0", "serde", @@ -7551,8 +7698,8 @@ dependencies = [ "pin-project", "prost", "prost-derive", - "rustls-native-certs 0.6.2", - "rustls-pemfile 1.0.2", + "rustls-native-certs 0.6.3", + "rustls-pemfile", "tokio", "tokio-rustls 0.23.4", "tokio-stream", @@ -7578,7 +7725,7 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "indexmap 1.9.2", + "indexmap 1.9.3", "pin-project", "pin-project-lite", "rand 0.8.5", @@ -7590,25 +7737,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tower-http" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - [[package]] name = "tower-layer" version = "0.3.2" @@ -7636,20 +7764,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", "valuable", @@ -7698,9 +7826,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "matchers", "nu-ansi-term", @@ -7709,7 +7837,7 @@ dependencies = [ "serde", "serde_json", "sharded-slab", - "smallvec", + "smallvec 1.11.0", "thread_local", "tracing", "tracing-core", @@ -7724,7 +7852,7 @@ source = "git+https://github.com/synapseweb3/lighthouse?rev=2c246d6#2c246d68011f dependencies = [ "eth2_hashing", "ethereum-types", - "smallvec", + "smallvec 1.11.0", ] [[package]] @@ -7739,9 +7867,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ee9bd9239c339d714d657fac840c6d2a4f9c45f4f9ec7b0975113458be78db" +checksum = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f" [[package]] name = "try-lock" @@ -7751,9 +7879,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" dependencies = [ "base64 0.13.1", "byteorder", @@ -7762,31 +7890,32 @@ dependencies = [ "httparse", "log", "rand 0.8.5", - "sha-1", + "rustls 0.20.9", + "sha1", "thiserror", "url", "utf-8", + "webpki 0.22.1", ] [[package]] name = "tungstenite" -version = "0.18.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" +checksum = "e862a1c4128df0112ab625f55cd5c934bcb4312ba80b39ae4b4835a3fd58e649" dependencies = [ - "base64 0.13.1", "byteorder", "bytes", + "data-encoding", "http", "httparse", "log", "rand 0.8.5", - "rustls 0.20.8", + "rustls 0.21.7", "sha1", "thiserror", "url", "utf-8", - "webpki 0.22.0", ] [[package]] @@ -7824,7 +7953,7 @@ dependencies = [ "ethereum-types", "hex", "int_to_bytes", - "itertools", + "itertools 0.10.5", "lazy_static", "log", "maplit", @@ -7843,7 +7972,7 @@ dependencies = [ "serde_with 1.14.0", "serde_yaml 0.8.26", "slog", - "smallvec", + "smallvec 1.11.0", "superstruct", "swap_or_not_shuffle", "tempfile", @@ -7854,9 +7983,9 @@ dependencies = [ [[package]] name = "ucd-trie" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" @@ -7873,24 +8002,24 @@ dependencies = [ [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -7901,12 +8030,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" @@ -7921,9 +8044,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "unsafe-libyaml" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad2024452afd3874bf539695e04af6732ba06517424dbf958fdb16a01f3bef6c" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" [[package]] name = "untrusted" @@ -7933,25 +8056,25 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "ureq" -version = "2.6.2" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d" +checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9" dependencies = [ - "base64 0.13.1", + "base64 0.21.3", "flate2", "log", "once_cell", - "rustls 0.20.8", + "rustls 0.21.7", + "rustls-webpki 0.100.2", "url", - "webpki 0.22.0", - "webpki-roots 0.22.6", + "webpki-roots 0.23.1", ] [[package]] name = "url" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -7964,23 +8087,29 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", "serde", ] [[package]] name = "uuid" -version = "1.3.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", ] [[package]] @@ -8012,9 +8141,9 @@ dependencies = [ [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -8022,19 +8151,18 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] [[package]] name = "warp" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7b8be92646fc3d18b06147664ebc5f48d222686cb11a8755e561a735aacc6d" +checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69" dependencies = [ "bytes", "futures-channel", @@ -8047,14 +8175,14 @@ dependencies = [ "mime_guess", "percent-encoding", "pin-project", - "rustls-pemfile 0.2.1", + "rustls-pemfile", "scoped-tls", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-stream", - "tokio-tungstenite 0.17.2", + "tokio-tungstenite 0.18.0", "tokio-util", "tower-service", "tracing", @@ -8074,9 +8202,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -8084,24 +8212,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -8111,9 +8239,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8121,28 +8249,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.31", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", @@ -8160,9 +8288,9 @@ dependencies = [ [[package]] name = "webpki" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" dependencies = [ "ring", "untrusted", @@ -8179,22 +8307,29 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" dependencies = [ - "webpki 0.22.0", + "rustls-webpki 0.100.2", ] +[[package]] +name = "webpki-roots" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" + [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix 0.38.11", ] [[package]] @@ -8229,18 +8364,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows_aarch64_gnullvm 0.42.1", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm 0.42.1", - "windows_x86_64_msvc 0.42.1", + "windows-targets 0.48.5", ] [[package]] @@ -8249,7 +8378,7 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets 0.42.1", + "windows-targets 0.42.2", ] [[package]] @@ -8263,17 +8392,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm 0.42.1", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm 0.42.1", - "windows_x86_64_msvc 0.42.1", + "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]] @@ -8293,9 +8422,9 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" @@ -8305,9 +8434,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" @@ -8317,9 +8446,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" @@ -8329,9 +8458,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" @@ -8341,9 +8470,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" @@ -8353,9 +8482,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" @@ -8365,9 +8494,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" @@ -8377,20 +8506,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.1" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b5872fa2e10bd067ae946f927e726d7d603eaeb6e02fa6a350e0722d2b8c11" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if 1.0.0", + "windows-sys 0.48.0", ] [[package]] @@ -8438,37 +8568,36 @@ 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.31", ] [[package]] name = "zip" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" dependencies = [ - "aes 0.7.5", + "aes", "byteorder", "bzip2", "constant_time_eq", "crc32fast", - "crossbeam-utils 0.8.15", + "crossbeam-utils 0.8.16", "flate2", "hmac", "pbkdf2 0.11.0", @@ -8498,9 +8627,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.7+zstd.1.5.4" +version = "2.0.8+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" dependencies = [ "cc", "libc", diff --git a/crates/relayer-cli/src/commands/keys/add.rs b/crates/relayer-cli/src/commands/keys/add.rs index bee5ee889..034476779 100644 --- a/crates/relayer-cli/src/commands/keys/add.rs +++ b/crates/relayer-cli/src/commands/keys/add.rs @@ -40,7 +40,9 @@ use crate::conclude::Output; #[clap( override_usage = "forcerelay keys add [OPTIONS] --chain --key-file - forcerelay keys add [OPTIONS] --chain --mnemonic-file " + forcerelay keys add [OPTIONS] --chain --mnemonic-file + + forcerelay keys add [OPTIONS] --chain --secret-file " )] pub struct KeysAddCmd { #[clap( @@ -71,6 +73,16 @@ pub struct KeysAddCmd { )] mnemonic_file: Option, + #[clap( + long = "secret-file", + required = true, + value_name = "SECRET_FILE", + help_heading = "FLAGS", + help = "Path to file containing secret key to restore from", + group = "add-restore" + )] + secret_file: Option, + #[clap( long = "key-name", value_name = "KEY_NAME", @@ -131,9 +143,13 @@ impl Runnable for KeysAddCmd { Ok(result) => result, }; - // Check if --key-file or --mnemonic-file was given as input. - match (self.key_file.clone(), self.mnemonic_file.clone()) { - (Some(key_file), _) => { + // Check if --key-file or --mnemonic-file or --secret-file was given as input. + match ( + self.key_file.clone(), + self.mnemonic_file.clone(), + self.secret_file.clone(), + ) { + (Some(key_file), _, _) => { let key = add_key( &opts.config, &opts.name, @@ -156,7 +172,7 @@ impl Runnable for KeysAddCmd { .exit(), } } - (_, Some(mnemonic_file)) => { + (_, Some(mnemonic_file), _) => { let key = restore_key( &mnemonic_file, &opts.name, @@ -180,6 +196,25 @@ impl Runnable for KeysAddCmd { .exit(), } } + (_, _, Some(secret_file)) => { + let key = + parse_key_from_secret(&secret_file, &opts.name, &opts.config, self.overwrite); + + match key { + Ok(key) => Output::success_msg(format!( + "Parsed key '{}' ({}) on chain {}", + opts.name, + key.account(), + opts.config.id(), + )) + .exit(), + Err(e) => Output::error(format!( + "An error occurred parsing the key on chain {} from file {:?}: {}", + self.chain_id, secret_file, e + )) + .exit(), + } + } // This case should never trigger. // The 'required' parameter for the flags will trigger an error if both flags have not been given. // And the 'group' parameter for the flags will trigger an error if both flags are given. @@ -255,6 +290,15 @@ pub fn restore_key( Ok(key_pair) } +pub fn parse_key_from_secret( + _secret_file: &Path, + _key_name: &str, + _config: &ChainConfig, + _overwrite: bool, +) -> eyre::Result { + unimplemented!() +} + /// Check if the key with the given key name already exists. /// If it already exists and overwrite is false, abort the command with an error. /// If overwrite is true, output a warning message informing the key will be overwritten. @@ -284,6 +328,7 @@ mod tests { chain_id: ChainId::from_string("chain_id"), key_file: Some(PathBuf::from("key_file")), mnemonic_file: None, + secret_file: None, key_name: None, hd_path: "m/44'/118'/0'/0/0".to_string(), overwrite: false, @@ -299,6 +344,7 @@ mod tests { chain_id: ChainId::from_string("chain_id"), key_file: None, mnemonic_file: Some(PathBuf::from("mnemonic_file")), + secret_file: None, key_name: None, hd_path: "m/44'/118'/0'/0/0".to_string(), overwrite: false @@ -313,6 +359,28 @@ mod tests { ) } + #[test] + fn test_keys_add_secret_key() { + assert_eq!( + KeysAddCmd { + chain_id: ChainId::from_string("chain_id"), + key_file: None, + mnemonic_file: None, + secret_file: Some(PathBuf::from("secret_file")), + key_name: None, + hd_path: "m/44'/118'/0'/0/0".to_string(), + overwrite: false, + }, + KeysAddCmd::parse_from([ + "test", + "--chain", + "chain_id", + "--secret-file", + "secret_file", + ]) + ) + } + #[test] fn test_keys_add_key_file_overwrite() { assert_eq!( @@ -320,6 +388,7 @@ mod tests { chain_id: ChainId::from_string("chain_id"), key_file: Some(PathBuf::from("key_file")), mnemonic_file: None, + secret_file: None, key_name: None, hd_path: "m/44'/118'/0'/0/0".to_string(), overwrite: true, @@ -342,6 +411,7 @@ mod tests { chain_id: ChainId::from_string("chain_id"), key_file: None, mnemonic_file: Some(PathBuf::from("mnemonic_file")), + secret_file: None, key_name: None, hd_path: "m/44'/118'/0'/0/0".to_string(), overwrite: true, @@ -357,6 +427,29 @@ mod tests { ) } + #[test] + fn test_keys_add_secret_key_overwrite() { + assert_eq!( + KeysAddCmd { + chain_id: ChainId::from_string("chain_id"), + key_file: None, + mnemonic_file: None, + secret_file: Some(PathBuf::from("secret_file")), + key_name: None, + hd_path: "m/44'/118'/0'/0/0".to_string(), + overwrite: true, + }, + KeysAddCmd::parse_from([ + "test", + "--chain", + "chain_id", + "--secret-file", + "secret_file", + "--overwrite" + ]) + ) + } + #[test] fn test_keys_add_no_file_nor_mnemonic() { assert!(KeysAddCmd::try_parse_from(["test", "--chain", "chain_id"]).is_err()); diff --git a/crates/relayer/Cargo.toml b/crates/relayer/Cargo.toml index 6b0d08224..4ef5e839d 100644 --- a/crates/relayer/Cargo.toml +++ b/crates/relayer/Cargo.toml @@ -42,7 +42,7 @@ serde = "1.0" serde_derive = "1.0" thiserror = "1.0.40" toml = "0.5" -tracing = "0.1.36" +tracing = { version = "0.1.36", features = ["log"] } tokio = { version = "1.0", features = [ "rt-multi-thread", "time", diff --git a/crates/relayer/src/keyring/ed25519_key_pair.rs b/crates/relayer/src/keyring/ed25519_key_pair.rs index 6f74af572..ec9f98539 100644 --- a/crates/relayer/src/keyring/ed25519_key_pair.rs +++ b/crates/relayer/src/keyring/ed25519_key_pair.rs @@ -109,6 +109,10 @@ impl Ed25519KeyPair { impl SigningKeyPair for Ed25519KeyPair { const KEY_TYPE: KeyType = KeyType::Ed25519; + fn from_secret_key(_secret_key: &str) -> Result { + unimplemented!() + } + fn from_key_file(key_file: KeyFile, hd_path: &StandardHDPath) -> Result { // TODO: Derive this from something in `key_file` let address_type = Ed25519AddressType::Solana; diff --git a/crates/relayer/src/keyring/secp256k1_key_pair.rs b/crates/relayer/src/keyring/secp256k1_key_pair.rs index a765a8f50..c6de5bf0e 100644 --- a/crates/relayer/src/keyring/secp256k1_key_pair.rs +++ b/crates/relayer/src/keyring/secp256k1_key_pair.rs @@ -284,6 +284,10 @@ impl Secp256k1KeyPair { impl SigningKeyPair for Secp256k1KeyPair { const KEY_TYPE: KeyType = KeyType::Secp256k1; + fn from_secret_key(_secret_key: &str) -> Result { + unimplemented!() + } + fn from_key_file(key_file: KeyFile, hd_path: &StandardHDPath) -> Result { // Decode the Bech32-encoded address from the key file let keyfile_address_bytes = decode_bech32(&key_file.address)?; diff --git a/crates/relayer/src/keyring/signing_key_pair.rs b/crates/relayer/src/keyring/signing_key_pair.rs index 048b6f0ae..9ac086aea 100644 --- a/crates/relayer/src/keyring/signing_key_pair.rs +++ b/crates/relayer/src/keyring/signing_key_pair.rs @@ -9,6 +9,10 @@ use crate::config::AddressType; pub trait SigningKeyPair { const KEY_TYPE: KeyType; + fn from_secret_key(secret_key: &str) -> Result + where + Self: Sized; + fn from_key_file(key_file: KeyFile, hd_path: &StandardHDPath) -> Result where Self: Sized; From 0f4b2bc3ed8ac88f807d370d6cd0f2665b34e3fc Mon Sep 17 00:00:00 2001 From: liyukun Date: Tue, 12 Sep 2023 10:12:29 +0800 Subject: [PATCH 2/7] docs: initial README.md --- README.md | 153 ++++++++++++++++++++++++-------------------- docs/Forcerelay.jpg | Bin 0 -> 247265 bytes 2 files changed, 83 insertions(+), 70 deletions(-) create mode 100644 docs/Forcerelay.jpg diff --git a/README.md b/README.md index b2a4335b4..063a1706a 100644 --- a/README.md +++ b/README.md @@ -2,81 +2,94 @@ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?logo=apache)](LICENSE) -Forcerelay aims to allow [CKB](https://github.com/nervosnetwork/ckb) -and chains built on [Axon](https://github.com/axonweb3/axon) gain the ability to -interact with Ethereum and Cosmos-SDK chains via [IBC protocol](https://github.com/cosmos/ibc). - -Forcerelay is based on [Hermes](https://github.com/informalsystems/hermes), which helps Cosmos-SDK chains to interact with each other. Many thanks to them! - -## **WARNING** - -This repo is still in early stage. Your issues or PRs are welcome. - -## Using Forcerelay/Eth - -Create or modify `~/.hermes/config.toml`. Here is an example: - -```toml -[global] -log_level = 'trace' - -[mode] - -[mode.clients] -enabled = true -refresh = true -misbehaviour = true - -[mode.connections] -enabled = false - -[mode.channels] -enabled = false - -[mode.packets] -enabled = true -clear_interval = 100 -clear_on_start = true -tx_confirmation = true - -[[chains]] -id = 'ibc-eth-1' -genesis_time = 1606824023 -genesis_root = "0x4b363db94e286120d76eb905340fdd4e54bfe9f06bf33ff6cf5ad27f511bfe95" -initial_checkpoint = "0x6c668d888d2b892bf26c25ee937ed43b48048dedda971ff33ebaaae7b2bd3890" -key_name = 'relayer_eth_wallet' -rpc_addr_pool = [ - "https://www.lightclientdata.org", -] -rpc_port = 8545 -[chains.forks] -genesis = { epoch = 0, fork_version = "0x00000000" } -altair = { epoch = 74240, fork_version = "0x01000000" } -bellatrix = { epoch = 144896, fork_version = "0x02000000" } -capella = { epoch = 194048, fork_version = "0x03000000" } - -[[chains]] -id = 'ckb-multi-client-4-1' -ckb_rpc = "https://testnet.ckbapp.dev" -ckb_indexer_rpc = "https://testnet.ckbapp.dev" -lightclient_contract_typeargs = "0x75ca34f9f1c28cf16d160fc485d5ed4a2a8f34424ec5854a7579ca82e72b7671" -lightclient_lock_typeargs = "0x8d5300c03081b19a28a30d2e8202a467ab19fafa5285c86896db035e783186d5" -minimal_updates_count = 1 -key_name = "relayer_ckb_wallet" -data_dir = "./ckb_mmr_storage_multi_client_4_1" -client_type_args = { cells_count = 4, type_id = "0x673e557da4c8381638fc808956aa27e384cf66d9a63899a6e4e932c2395f7a40" } + +Forcerelay is an IBC-Compatible bridge that aims to open up the Nervos ecosystem and the Cosmos ecosystem, and it also serves as a standard cross-chain solution within the Nervos ecosystem. + +Forcerelay is built on [Hermes](https://github.com/informalsystems/hermes), this means we will keep continue to track and update the latest version of Hermes, and won't stop it on any specific old version. + +Currently, Forcerelay only supports Axon, CKB and Cosmos-SDK chains, but not support other mainstream EVM chains, like Ethereum, Arbitrum and BSC, because it's not easy to run a light-client from any chains above on EVM. However, the implementation of mainstream EVM chains is on our future plan, we will keep you up-to-date with this. + +## Progress Tracking +Forcerelay is in development, any issues and PRs are welcome. Here is where we are in gerneral: +- [ ] Upgrade the underline Hermes from v1.4.0 to the latest v1.6.0 +- [x] Implement connection and channel layer of IBC protocol between Axon and CKB +- [ ] Implement packet layer of IBC protocol between Axon and CKB +- [ ] Implement entire IBC protocol between Axon and Cosmos-SDK chains +- [ ] Implement entire IBC protocol between CKB and Cosmos-SDK chains + +## Architecture Design +Cosmos IBC is a cross-chain protocol designed based on light-client technology. In case of homogeneous chains, it's supposed to implement only one light-client module to run the protocol. However, in case of Forcerelay, chains are non-homogeneous, so we have to implement at least three light-client modules to run IBC protocol between Axon, CKB and Cosmos. + +Contract development environment is sensitive to the blockchain's VM implementation, which means the different VM implementation requires us to provide different light-client solutions, even the solutions come from the same blockchain. + +High level diagram of Forcerelay: +![Alt text](docs/Forcerelay.jpg) + +## Usage Guidance +Take the IBC cross-chain betwwen Axon and CKB as an example. + +### Contract Deployment on Axon +Before deploying [ibc-solidity-contract](https://github.com/synapseweb3/ibc-solidity-contract) on Axon, please make sure Node.js and Yarn are installed: + +``` +$ git clone https://github.com/synapseweb3/ibc-solidity-contract +$ cd ibc-solidity-contract +$ echo AXON_HTTP_RPC_URL="YOUR_AXON_URL" > .env +$ yarn migrate > migrate.log | tail -f migrate.log ``` -Run command `forcerelay eth-ckb --ethereum-chain-id ibc-eth-1 --ckb-chain-id ibc-ckb-1` to start up relay of ETH headers to CKB network. +After running `yarn migrate`, the `OwnableIBCHandler` address is listing in console, we record it and mark as **`YOUR_IBC_AXON_ADDRESS`** to use later. + +### Contract Deployment on CKB +Detailed deployment steps can be found in [ibc-ckb-contracts](https://github.com/synapseweb3/ibc-ckb-contracts), or pre-deployed contracts `TYPE_ARGS` on testnet and mainnet can be found here: +||Mainnet|Testnet| +|-|-|-| +|connection|WIP|WIP| +|channel|WIP|WIP| +|packet|WIP|WIP| +|utility|WIP|WIP| +|escrow|WIP|WIP| -Warn: relayer is still under rapid development and the configuration example and command above may be outdated. +### Register Business Module +When deploying the solidity contract on Axon, an initial ICS20 transfer module has been registered in `OwnableIBCHandler` on port `port-0` while contract migration, and it's open to everyone to register their own business module, [here](https://github.com/synapseweb3/ibc-solidity-contract) is the detailed registry steps. -## Using Forcerelay/Axon (WIP) +Unlike Axon, modules cannot be registered directly in contract on CKB. To fix that, we introduce [forcerelay-ckb-sdk](https://github.com/synapseweb3/forcerelay-ckb-sdk), which is designed to complete the distribution and calling of custom modules. -Run `cargo test -p ibc-test --lib --all-features -- tests::integration_test --exact --nocapture --ignored` to check Ckb endpoint, which tests connection and channel layers between two Ckb chains +Which needs to be noticed is, IBC port on CKB currently is the `LOCK_HASH` of your wallet cell on CKB, we mark it as `WALLET_LOCK_HASH` and use later. -Run `Forcerelay create connection --a-chain axon-0 --b-chain axon-1` and `Forcerelay create channel --a-chain axon-0 --a-connection connection-0 --a-port mock-port-0 --b-port mock-port-0` to create connection and channel between two Axon chains +### Installation and Settings +We recommand you to download the pre-compiled binary, or you can compile mannully from the source code, which requires `Rust ^v1.56.0` installed: -## Rqeuirements +``` +$ git clone https://github.com/synapseweb3/forcerelay +$ cd forcerelay +$ cargo install -p ibc-relayer-cli +$ forcerelay --version +``` + +Forcerelay can run by specifying a configuration file in the command line, or the `~/.hermes/config.toml` file will be accessed. An [example](https://github.com/synapseweb3/forcerelay/blob/main/config.toml) configuration file written for Axon and CKB (Testnet) have been pre-generated, and only minimal modifications are required to support running Forcerelay: + +``` +websocket_addr = "ws://:" +rpc_addr = "http://:/" +contract_address = "" +``` -This project requires Rust `^1.65.0`. +### Import Secret Key +Before running Forcerelay, accounts at both sides of blockchains should be prepared and imported. In the scenario of Axon and CKB, Forcerelay needs its own Axon and CKB accounts with sufficient tokens. Here are steps to import Secp256k1 secret keys: + +``` +$ forcerelay keys add --chain axon-0 --secret-file +$ forcerelay keys add --chain ckb4ibc-0 --secret-file +``` + +### Connecting and Start Forcerelay +Establishing IBC channels on both sides of Axon and CKB is required to run Forcerelay: + +``` +$ forcerelay create channel \ + --a-chain axon-0 --b-chain ckb4ibc-0 \ + --a-port port-0 --b-port \ + --new-client-connection +$ forcerelay start --config +``` \ No newline at end of file diff --git a/docs/Forcerelay.jpg b/docs/Forcerelay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58fe6630d4cab4e36939d9f964c3311909e24ef9 GIT binary patch literal 247265 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 X$#Dh-*WQT4~MEg9XX?_v2GA$ZL0~Px!&4 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 K-O&D+`u_lZ5R3!> literal 0 HcmV?d00001 From d5a35219312934f46d0030476c7d13799dcbeadf Mon Sep 17 00:00:00 2001 From: liyukun Date: Tue, 12 Sep 2023 15:40:27 +0800 Subject: [PATCH 3/7] feat: complete --secret-key option for keys command --- crates/relayer-cli/src/commands/keys/add.rs | 37 ++++++++++++++++--- crates/relayer/src/chain/ckb/tests.rs | 2 +- crates/relayer/src/chain/cosmos/encode.rs | 4 +- crates/relayer/src/config.rs | 12 ++---- .../relayer/src/keyring/ed25519_key_pair.rs | 2 +- .../relayer/src/keyring/secp256k1_key_pair.rs | 27 ++++++++++++-- .../relayer/src/keyring/signing_key_pair.rs | 2 +- tools/test-framework/src/chain/chain_type.rs | 6 +-- 8 files changed, 65 insertions(+), 27 deletions(-) diff --git a/crates/relayer-cli/src/commands/keys/add.rs b/crates/relayer-cli/src/commands/keys/add.rs index 034476779..28d765f70 100644 --- a/crates/relayer-cli/src/commands/keys/add.rs +++ b/crates/relayer-cli/src/commands/keys/add.rs @@ -11,7 +11,7 @@ use eyre::eyre; use hdpath::StandardHDPath; use ibc_relayer::{ chain::ChainType, - config::{ChainConfig, Config}, + config::{AddressType, ChainConfig, Config}, keyring::{ AnySigningKeyPair, KeyRing, Secp256k1KeyPair, SigningKeyPair, SigningKeyPairSized, Store, }, @@ -291,12 +291,37 @@ pub fn restore_key( } pub fn parse_key_from_secret( - _secret_file: &Path, - _key_name: &str, - _config: &ChainConfig, - _overwrite: bool, + secret_file: &Path, + key_name: &str, + config: &ChainConfig, + overwrite: bool, ) -> eyre::Result { - unimplemented!() + let secret_key = + fs::read_to_string(secret_file).map_err(|_| eyre!("error reading the secret file"))?; + + let (account_prefix, address_type) = match config.r#type() { + ChainType::CosmosSdk => (config.cosmos().account_prefix.as_str(), AddressType::Cosmos), + ChainType::Eth => ( + "eth", + AddressType::Ethermint { + pk_type: Default::default(), + }, + ), + ChainType::Axon => ("axon", AddressType::Axon), + ChainType::Ckb => ("ckb", AddressType::Ckb), + ChainType::Ckb4Ibc => ("ckb4ibc", AddressType::Ckb), + }; + let key_pair = { + let mut keyring = KeyRing::new_secp256k1(Store::Test, account_prefix, config.id())?; + + check_key_exists(&keyring, key_name, overwrite); + + let key_pair = Secp256k1KeyPair::from_secret_key(secret_key.trim(), &address_type)?; + + keyring.add_key(key_name, key_pair.clone())?; + key_pair.into() + }; + Ok(key_pair) } /// Check if the key with the given key name already exists. diff --git a/crates/relayer/src/chain/ckb/tests.rs b/crates/relayer/src/chain/ckb/tests.rs index bc8cfd5d1..9d4757f93 100644 --- a/crates/relayer/src/chain/ckb/tests.rs +++ b/crates/relayer/src/chain/ckb/tests.rs @@ -146,7 +146,7 @@ fn test_create_eth_multi_client(case_id: usize) { let network = chain.network().unwrap(); let is_mainnet = network == NetworkType::Mainnet; let account_prefix = if is_mainnet { "ckb" } else { "ckt" }; - let address_type = AddressType::Ckb { is_mainnet }; + let address_type = AddressType::Ckb; Secp256k1KeyPair::from_mnemonic(mnemonic, &hd_path, &address_type, account_prefix) .unwrap() }; diff --git a/crates/relayer/src/chain/cosmos/encode.rs b/crates/relayer/src/chain/cosmos/encode.rs index 47c7a017f..91a6453e0 100644 --- a/crates/relayer/src/chain/cosmos/encode.rs +++ b/crates/relayer/src/chain/cosmos/encode.rs @@ -147,8 +147,8 @@ fn encode_signer_info( ) -> Result { let pk_type = match address_type { AddressType::Cosmos => "/cosmos.crypto.secp256k1.PubKey".to_string(), - AddressType::Ethermint { pk_type } | AddressType::Axon { pk_type } => pk_type.clone(), - AddressType::Ckb { .. } => todo!(), + AddressType::Ethermint { pk_type } => pk_type.clone(), + AddressType::Ckb | AddressType::Axon => todo!(), }; // Create a MsgSend proto Any message let pk_any = Any { diff --git a/crates/relayer/src/config.rs b/crates/relayer/src/config.rs index b7485d10e..d6a29370a 100644 --- a/crates/relayer/src/config.rs +++ b/crates/relayer/src/config.rs @@ -670,12 +670,8 @@ pub enum AddressType { Ethermint { pk_type: String, }, - Ckb { - is_mainnet: bool, - }, - Axon { - pk_type: String, - }, + Ckb, + Axon, } impl Display for AddressType { @@ -683,8 +679,8 @@ impl Display for AddressType { match self { AddressType::Cosmos => write!(f, "cosmos"), AddressType::Ethermint { .. } => write!(f, "ethermint"), - AddressType::Ckb { .. } => write!(f, "ckb"), - AddressType::Axon { .. } => write!(f, "axon"), + AddressType::Ckb => write!(f, "ckb"), + AddressType::Axon => write!(f, "axon"), } } } diff --git a/crates/relayer/src/keyring/ed25519_key_pair.rs b/crates/relayer/src/keyring/ed25519_key_pair.rs index ec9f98539..0ea481cb2 100644 --- a/crates/relayer/src/keyring/ed25519_key_pair.rs +++ b/crates/relayer/src/keyring/ed25519_key_pair.rs @@ -109,7 +109,7 @@ impl Ed25519KeyPair { impl SigningKeyPair for Ed25519KeyPair { const KEY_TYPE: KeyType = KeyType::Ed25519; - fn from_secret_key(_secret_key: &str) -> Result { + fn from_secret_key(_secret_key: &str, _address_type: &AddressType) -> Result { unimplemented!() } diff --git a/crates/relayer/src/keyring/secp256k1_key_pair.rs b/crates/relayer/src/keyring/secp256k1_key_pair.rs index c6de5bf0e..bea397fe1 100644 --- a/crates/relayer/src/keyring/secp256k1_key_pair.rs +++ b/crates/relayer/src/keyring/secp256k1_key_pair.rs @@ -1,4 +1,5 @@ use core::any::Any; +use std::str::FromStr; use bip39::{Language, Mnemonic, Seed}; use bitcoin::{ @@ -96,8 +97,8 @@ impl TryFrom<&AddressType> for Secp256k1AddressType { Ok(Self::Ethermint) } AddressType::Cosmos | AddressType::Ethermint { pk_type: _ } => Ok(Self::Cosmos), - AddressType::Ckb { .. } => Ok(Self::Ckb), - AddressType::Axon { .. } => Ok(Self::Axon), + AddressType::Ckb => Ok(Self::Ckb), + AddressType::Axon => Ok(Self::Axon), } } } @@ -284,8 +285,26 @@ impl Secp256k1KeyPair { impl SigningKeyPair for Secp256k1KeyPair { const KEY_TYPE: KeyType = KeyType::Secp256k1; - fn from_secret_key(_secret_key: &str) -> Result { - unimplemented!() + fn from_secret_key(secret_key: &str, address_type: &AddressType) -> Result { + let private_key = + SecretKey::from_str(secret_key).map_err(|e| Error::secp256k1(e.to_string()))?; + let public_key = private_key.public_key(&Secp256k1::signing_only()); + let address_type: Secp256k1AddressType = address_type.try_into()?; + let address = get_address(&public_key, address_type); + let account = if address_type == Secp256k1AddressType::Cosmos { + return Err(Error::secp256k1( + "--secret-key not support Cosmos chain".to_owned(), + )); + } else { + hex::encode(address) + }; + Ok(Self { + private_key, + public_key, + address, + address_type, + account, + }) } fn from_key_file(key_file: KeyFile, hd_path: &StandardHDPath) -> Result { diff --git a/crates/relayer/src/keyring/signing_key_pair.rs b/crates/relayer/src/keyring/signing_key_pair.rs index 9ac086aea..5d45aef98 100644 --- a/crates/relayer/src/keyring/signing_key_pair.rs +++ b/crates/relayer/src/keyring/signing_key_pair.rs @@ -9,7 +9,7 @@ use crate::config::AddressType; pub trait SigningKeyPair { const KEY_TYPE: KeyType; - fn from_secret_key(secret_key: &str) -> Result + fn from_secret_key(secret_key: &str, address_type: &AddressType) -> Result where Self: Sized; diff --git a/tools/test-framework/src/chain/chain_type.rs b/tools/test-framework/src/chain/chain_type.rs index e6af8ea98..2d7b42e57 100644 --- a/tools/test-framework/src/chain/chain_type.rs +++ b/tools/test-framework/src/chain/chain_type.rs @@ -65,10 +65,8 @@ impl ChainType { Self::Evmos => AddressType::Ethermint { pk_type: "/ethermint.crypto.v1.ethsecp256k1.PubKey".to_string(), }, - Self::Ckb => AddressType::Ckb { is_mainnet: false }, - Self::Axon => AddressType::Axon { - pk_type: "/axon.crypto.v1.ethsecp256k1.PubKey".to_string(), - }, + Self::Ckb => AddressType::Ckb, + Self::Axon => AddressType::Axon, } } } From 8d3c6f3821fd80b198a42c2cd9b3f51821999e79 Mon Sep 17 00:00:00 2001 From: liyukun Date: Wed, 13 Sep 2023 10:09:22 +0800 Subject: [PATCH 4/7] chore: update command prompt --- crates/relayer-cli/src/commands/keys/add.rs | 4 ++++ guide/src/templates/help_templates/keys/add.md | 3 +++ guide/src/templates/help_templates/version.md | 8 -------- scripts/auto_gen_templates.sh | 0 4 files changed, 7 insertions(+), 8 deletions(-) mode change 100644 => 100755 scripts/auto_gen_templates.sh diff --git a/crates/relayer-cli/src/commands/keys/add.rs b/crates/relayer-cli/src/commands/keys/add.rs index 28d765f70..dfa250f87 100644 --- a/crates/relayer-cli/src/commands/keys/add.rs +++ b/crates/relayer-cli/src/commands/keys/add.rs @@ -34,6 +34,10 @@ use crate::conclude::Output; /// /// `keys add [OPTIONS] --chain --mnemonic-file ` /// +/// The command to restore a key from a file containing secret key: +/// +/// `keys add [OPTIONS] --chain --secret-file ` +/// /// The key-file and mnemonic-file flags can't be given at the same time, this will cause a terminating error. /// If successful the key will be created or restored, depending on which flag was given. #[derive(Clone, Command, Debug, Parser, PartialEq, Eq)] diff --git a/guide/src/templates/help_templates/keys/add.md b/guide/src/templates/help_templates/keys/add.md index 940042189..d510fe723 100644 --- a/guide/src/templates/help_templates/keys/add.md +++ b/guide/src/templates/help_templates/keys/add.md @@ -6,6 +6,8 @@ USAGE: forcerelay keys add [OPTIONS] --chain --mnemonic-file + forcerelay keys add [OPTIONS] --chain --secret-file + OPTIONS: -h, --help Print help information --hd-path Derivation path for this key [default: m/44'/118'/0'/0/0] @@ -16,3 +18,4 @@ FLAGS: --chain Identifier of the chain --key-file Path to the key file --mnemonic-file Path to file containing mnemonic to restore the key from + --secret-file Path to file containing hex-encoded secret key to restore from diff --git a/guide/src/templates/help_templates/version.md b/guide/src/templates/help_templates/version.md index ed6f70cb8..e69de29bb 100644 --- a/guide/src/templates/help_templates/version.md +++ b/guide/src/templates/help_templates/version.md @@ -1,8 +0,0 @@ -DESCRIPTION: -The `version` subcommand, retained for backward compatibility - -USAGE: - forcerelay version - -OPTIONS: - -h, --help Print help information diff --git a/scripts/auto_gen_templates.sh b/scripts/auto_gen_templates.sh old mode 100644 new mode 100755 From 77926709b6264316d6e59992c5af2533daf35d0c Mon Sep 17 00:00:00 2001 From: liyukun Date: Thu, 14 Sep 2023 10:50:07 +0800 Subject: [PATCH 5/7] chore: update revised READEME.md --- README.md | 24 +++++++++--------- crates/relayer-cli/src/commands/keys/add.rs | 2 +- docs/Forcerelay.jpg | Bin 247265 -> 248043 bytes .../commands/forcerelay/keys/add_3.md | 1 + .../src/templates/help_templates/keys/add.md | 15 ++++++++--- guide/src/templates/help_templates/version.md | 8 ++++++ 6 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 guide/src/templates/commands/forcerelay/keys/add_3.md diff --git a/README.md b/README.md index 063a1706a..84e6e8b74 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,12 @@ Forcerelay is an IBC-Compatible bridge that aims to open up the Nervos ecosystem Forcerelay is built on [Hermes](https://github.com/informalsystems/hermes), this means we will keep continue to track and update the latest version of Hermes, and won't stop it on any specific old version. -Currently, Forcerelay only supports Axon, CKB and Cosmos-SDK chains, but not support other mainstream EVM chains, like Ethereum, Arbitrum and BSC, because it's not easy to run a light-client from any chains above on EVM. However, the implementation of mainstream EVM chains is on our future plan, we will keep you up-to-date with this. +At present, Forcerelay exclusively supports Axon, CKB, and Cosmos-SDK chains, prioritizing their seamless operation. While it currently doesn't encompass other well-established EVM chains, such as Ethereum, Arbitrum, and BSC, this is primarily due to the intricacies of running a light-client from these chains on EVM. Nevertheless, our roadmap includes plans for implementing mainstream EVM chains, and we'll keep you informed on our progress in this regard. ## Progress Tracking -Forcerelay is in development, any issues and PRs are welcome. Here is where we are in gerneral: -- [ ] Upgrade the underline Hermes from v1.4.0 to the latest v1.6.0 +Forcerelay is actively under development, and we welcome any issues and pull requests. Here's an overview of our current progress: - [x] Implement connection and channel layer of IBC protocol between Axon and CKB +- [ ] Upgrade the underline Hermes from v1.4.0 to the latest v1.6.0 - [ ] Implement packet layer of IBC protocol between Axon and CKB - [ ] Implement entire IBC protocol between Axon and Cosmos-SDK chains - [ ] Implement entire IBC protocol between CKB and Cosmos-SDK chains @@ -41,7 +41,7 @@ $ yarn migrate > migrate.log | tail -f migrate.log After running `yarn migrate`, the `OwnableIBCHandler` address is listing in console, we record it and mark as **`YOUR_IBC_AXON_ADDRESS`** to use later. ### Contract Deployment on CKB -Detailed deployment steps can be found in [ibc-ckb-contracts](https://github.com/synapseweb3/ibc-ckb-contracts), or pre-deployed contracts `TYPE_ARGS` on testnet and mainnet can be found here: +Detailed deployment steps can be found in [ibc-ckb-contracts](https://github.com/synapseweb3/ibc-ckb-contracts). Alternatively, you can find pre-deployed contracts TYPE_ARGS on both testnet and mainnet: ||Mainnet|Testnet| |-|-|-| |connection|WIP|WIP| @@ -50,14 +50,14 @@ Detailed deployment steps can be found in [ibc-ckb-contracts](https://github.com |utility|WIP|WIP| |escrow|WIP|WIP| -### Register Business Module -When deploying the solidity contract on Axon, an initial ICS20 transfer module has been registered in `OwnableIBCHandler` on port `port-0` while contract migration, and it's open to everyone to register their own business module, [here](https://github.com/synapseweb3/ibc-solidity-contract) is the detailed registry steps. +### Business Module Registration +When deploying the Solidity contract on Axon, an initial ICS20 transfer module is automatically registered in `OwnableIBCHandler` on port `port-0` during the contract migration process. This registration is open to all users. For detailed instructions on how to register your own business module, visit [ibc-solidity-contract](https://github.com/synapseweb3/ibc-solidity-contract) repository. -Unlike Axon, modules cannot be registered directly in contract on CKB. To fix that, we introduce [forcerelay-ckb-sdk](https://github.com/synapseweb3/forcerelay-ckb-sdk), which is designed to complete the distribution and calling of custom modules. +Unlike Axon, business modules cannot be registered directly with a contract on CKB. To address this, we have introduced [forcerelay-ckb-sdk](https://github.com/synapseweb3/forcerelay-ckb-sdk), designed to facilitate the distribution and calling of custom modules. -Which needs to be noticed is, IBC port on CKB currently is the `LOCK_HASH` of your wallet cell on CKB, we mark it as `WALLET_LOCK_HASH` and use later. +It's important to note that the IBC port on CKB corresponds to the `LOCK_HASH` of your wallet cell on CKB, which we will refer to as `WALLET_LOCK_HASH` for future use. -### Installation and Settings +### Installation and Setting We recommand you to download the pre-compiled binary, or you can compile mannully from the source code, which requires `Rust ^v1.56.0` installed: ``` @@ -67,7 +67,7 @@ $ cargo install -p ibc-relayer-cli $ forcerelay --version ``` -Forcerelay can run by specifying a configuration file in the command line, or the `~/.hermes/config.toml` file will be accessed. An [example](https://github.com/synapseweb3/forcerelay/blob/main/config.toml) configuration file written for Axon and CKB (Testnet) have been pre-generated, and only minimal modifications are required to support running Forcerelay: +Forcerelay can be executed by specifying a configuration file in the command line, otherwise it will access the `~/.hermes/config.toml`. We provide a pre-generated [example](https://github.com/synapseweb3/forcerelay/blob/main/config.toml) configuration file written for Axon and CKB (Testnet). To run Forcerelay, only minimal modifications are needed to this configuration: ``` websocket_addr = "ws://:" @@ -76,14 +76,14 @@ contract_address = "" ``` ### Import Secret Key -Before running Forcerelay, accounts at both sides of blockchains should be prepared and imported. In the scenario of Axon and CKB, Forcerelay needs its own Axon and CKB accounts with sufficient tokens. Here are steps to import Secp256k1 secret keys: +Before running Forcerelay, accounts should be prepared on both blockchain networks and imported accordingly. In the case of Axon and CKB, Forcerelay needs its own Axon and CKB accounts with a sufficient amount of token balance. Follow these steps to import Secp256k1 secret keys: ``` $ forcerelay keys add --chain axon-0 --secret-file $ forcerelay keys add --chain ckb4ibc-0 --secret-file ``` -### Connecting and Start Forcerelay +### Connect and Start Forcerelay Establishing IBC channels on both sides of Axon and CKB is required to run Forcerelay: ``` diff --git a/crates/relayer-cli/src/commands/keys/add.rs b/crates/relayer-cli/src/commands/keys/add.rs index dfa250f87..3d39a04bc 100644 --- a/crates/relayer-cli/src/commands/keys/add.rs +++ b/crates/relayer-cli/src/commands/keys/add.rs @@ -82,7 +82,7 @@ pub struct KeysAddCmd { required = true, value_name = "SECRET_FILE", help_heading = "FLAGS", - help = "Path to file containing secret key to restore from", + help = "Path to file containing hex-encoded secret key to restore from", group = "add-restore" )] secret_file: Option, diff --git a/docs/Forcerelay.jpg b/docs/Forcerelay.jpg index 58fe6630d4cab4e36939d9f964c3311909e24ef9..34850ca61d9dc6d01a350524ed6ab3e281ca7792 100644 GIT binary patch delta 31850 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 E01*{Cg8%>k delta 30689 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

JT|+VU?~k12 zPG6gjtT)BGO#UR`8aqK*MBni-v6o9}R*ue(sDJ|Tt%p`N=5Qob%peIor)0mmdMR4z zw3SHI1plq*Q>bls=YNvO=^GjdnNr1KdQ?DOOSEMo3(wb*cQ~Yj>j|OW5pEH=sBy(V z?^=)bTJ~bj86jO=9be6J9PhAZvn&ndDe{+YCO(4^@ccU{BIFAh)!dT_6j_KmlyXfE zC{WG$kaWIHkSp9wKG`D1Y6zcK&QF7rwFbRq{*>9<&FL{uU+L(0a}p3)43<1Hyerq` z%IoP~<#&pM%kUHX@iMwT!?%UDP4?}_2n(!W^y^-IpG8ZT^^|EB7#WQc-IWs2@m+U1 zd$!AZBcBOH{%^qzA#+m?{fF%l`f>z^Dmv^F`_%s{%OPM{jt+amUf8}X&w&yGz)C0S zjn-FVK63I<-0R!kf`KTb>Dx1Nw2NLhQcjl-1b1vzyT#4@AjM9AfSeaEZIS%fopzJL zJ4QN?cqdt;%Qb&o_f5(tW&7~q?ooMj&PXoY zSs)}Y7vN)QvPSVO2I;2q+fZNu%{tVcaN5;@bFxbE{92Gj@kO_dP5n)MADvISr^i9G zzEP6oN$?gDO7r4m*6!IE^aiFKR=`*!tvR-~L4pUw|2}P2btYU!9CgTf#Woagk+*Y( zOz+1xp&tPL`1FNG3zxl4rLq?5Juhl$)^rv<>>hkye>fuL@Jp%lFXez=*4&$}J9Y7q zluqh>+D(GcqNwfLsn;!9hl9`<0S4@@B>lv`#xu9^^;b5(LzS$N8?Hwcj+pUg;xC3k zA*M3OFmM51()t&Ps1m`>Y8s;N097eicGqBWBJ8quot+f%qPe16HgEAM>$80apsQ%d zp&EIOW=NjyEd?^G05U$uRCJ_TKxjyxddr4T(69PDzh`1gWz^siwt0Nt^XgBZDgz-3 zH&veYgy@|+LBABEwPxINgz|NAr{zn*v_-D1p;D4^?nX^gNQs1X=;5U|Pxq~YmXBQx zgnVL2#2A?~%W>^Ov>>k~v-W6f`j)`=_ZA(w>40U-Sw&y)fc0CJ|0j zgNMMS{2%DnbqXXmYS$)X?$N%G*I1I={q~X!b=D+n6g)n#mpi6W^XvO8s|DYao3S2i z_;$m^ZXg0QC;S?tdNVPwJ9uH#1WYIre+V^2BIIzRIl+>)8ASDIdap@ z>j*O)76N0VdE1h`Q(z%#%LW#c&ul%6`~Y%&ow_#Yh~ZmlKEhplqT3(v+s$Sv(-bL+ ztAB@uat-9q0kVr8i|#)}zlDKCrT^iQQpaPN;O9V$J@nKktv>zCJqQzn`9Txq<-uDa zz=9$;H=w^YOo{QmM1gFNziZ{jy>nA}Tr#@kYwCM^80CD!CseATc|>On%)|k1gO+qY zhHEL@zVBcnxp3%uQB|&soX54SE4r#rI3-oDML-z3XIYBg6{xe!GJtTJStLXC1J^To zC%((X{}~v3l28buQF&*Hd7tP8r8r>h(}Y1bb1fH%C!%+}L)IqJK$qwrK#*;xwEr&|1_YJpvd7@Bi zsWLXLl5%Z3D7NP7v$PqTn*qNrKWq@u&ktBwG~@O;`^n}7U6M8K&1I^Fyv2OMNT6I8 zC^psTYNI7Le0Kp&@oJHX5aD+P?#kAFU`P$xVbk|+#_-g;J51mZA@6GhF?DWaf&(@A zA2umdJ^M9;D9!MvbA4KlKvChs7{o$M|2zMOH)63$u}WVzZ@gUSj5c_WYgXyA&*?cs zYoy!6EUqGkMtfv}q2xDv%en_VdT-Bo7`=7bw7K=j%18^XXK6K%y)M_qzYdvbMaaeA zs3>qL@4!-^0>Bx*_r`{+Fp;2xsATO&@22a|Y*)%{v^eT}o>w^eblvz#--->)1L?y| z1#ai@pawgZx6+XY0XK$cO z|Ra?_33P@s~SfJ<(HrQ+J7`&C=shayj| z+Saz3@D3A@-~Mb@H+P*>m%mNK9=+&{{Mnxy;a!7&gGe%l5`^Zj5xRF%TSDwktPM&_ zJON&g!g&YhqVIYr#BQEqkCl;a9DOAX-HE7n!=pZ9U(-r$x1o8xRiB3f6$&p~0`29H zrVHvxx0$TfOA3c#uaz4K&D*ZJ4#MWQ2)~hMDK&!^*1$7b=R&2#wD0sn{|B)Jg%7qT zAKg=E{P2e}+XwRF|7JD89%%_6kJ0Fq8tMVoez1$9`x-e!(P5`JuA49_V$cMk5quK9eXbY5 zhng%0fuWS$LG<;B)Lo5TTnjeRUUO)#QrdjW+e$X8&3XfVA1?Dt(7loAHHYrF%h8Dr zo#)Ui+`~zrnQ4%U0xD5>c8d26q8-*Y7KX(`)JfY8NK z17!(y46w=Ul*yDSHwZD+2Hb++7|__=w5U;C#T zL5LP)4@wPKIVJ$P0i?!grS+iB(1C^}hYVrZV1agyzkUy_h;??iPa@&Z_^_tK^Q~@o zn?{@0BLX+C`a}2~jl;|opf6fnw=j98$6|gH4M@LNF^Me5999p<4~D^QQY3*aiBB#M zG&kNYv_(a%rLpZh-hss`p#;x@tVJ9dAX(9`(I7~ zp>9iRDhpNZh!a6Yx6aqS8zyqGY4k!e*$&2t*dcEYq&WFREk%)N`Lfh9x$0R^wU2wr z<5cT4i!tNe!Bel2Y^bByL?MP4Vn{U5il~pFpQCNA5kBXUV8G(-!?PCx=D=d$z0RF6 z#P2BIvfc)=G%LB>pri91gY zrOA5zLYwsq;KBzR84fA?8Ii*(Q+2m1eUskVD8K~tMRrnCnDrpDDN3*!)UYS~ zO+g)J=uUT8pxUk|#|Jj3loM9i27+(2eSP-(4R0;%=TjIv&5HVL1_*}Av4$d$Q4}7s zOY+SSA_Qynx?C|Nw(^0?l-k_Vt!1VCs6L{C(+R30J3ZV2rN__(FIU&=#ldVc<)@)X zN&!qJ)>JS^bU9F(w3FIuJ+xUCYwW)@8Wr==p{Y?RZ8@7?b(EGsj;7X8c6Tr}tSL0E zg*&s}R6#SH+595t&5h&V>O(>VX~(+S=UIhk2E)^0Z;*dRtF0EZF<*midDk_{G;w6a zeqM$UFa+?%>{`&wt797c?IpJVy4oNBji)ZZOu7f-0?RIy_!Xbz&H1sa>g-!Eu#V?t zAX{j@bZ4Y88QmweaKVcqMs{ZlA@neNPoJ~4n z>~zCwWElBGBL(Y9J5)UuZjjj`cS-}yK~jbjk^(N~7!NDn%T^LdJ!JNym*NEo5TT3b z#`?XRCvt#5m>3P>F-bC(dJXusmBb~j{3O|pcQ-8!Y#x%orng$V+uG=lDz6nAFKV)xDhKBd!nlgAzEey=r$B zdFdl)ls%WWg!){nj3XJq={jviVUZpf0gMPAd6XJ{_-zQFgvH~FKE>U_odxS`HBbc* zfSV^yQ!&#l(Bd?aV|*saw>Eg;(6%D&u7|5?(}KC*t2$@_HV@FgOR#Z}5m#HL*^fv^ zgKXbwl{`1Ch=W-?G6*|Fii~uDuiP+*Muf57;U~GQ6Ys;^zhSqc`+-)ibXedh!Thef3R8!1C{tK38~_*q!XBpfnYG5|o&?AhSw+ z(_=VOF=wo7zFO~*7hhe9BCdDC`$zPz*Ld-m9_L4^hfJ$PrONJcE}|DW(uw-y-Oc`=alug zVexe1uR&=#tNmj9`4@h~(%)F%VlqWmt47?6u4&_nlEJMO)izUiiMWGwWTrOp0VQpB%E-1&*!bU~yf z4NZ<;-OWR)QDm%G@4uYEif_jiRlx$=-~NVcuBF~AyeDE^_qKN5E$!$!FZ~l}t-&)N z_i!NHX|bRx9QgaChdXBAJZpl|`l*oU5%>pGsCn3yv_c}N{=bPut1^tC_0iOckCuWa zM$|y&lY4Tfslhb(Dk2ZXF?9wiLi4tZ54t%+y3?xP8c?#FuRJ)K#9P>y0dw#U0;v&E z)(pOJH=U)!kZdMv^=G^`<|Yd9{LtAhmo5LWtf2wGTaP|a(lx6L9xHrTWaG+9gLm3z zU~<5)wKL>-vH{~XtC*#!vkw`p^lD~}E&oM*q3Y6ci}Rbwn0?TveUJk#-WBjn=iHp* z-U(amJQ#tF9o zi(5pi;ci>&Uq~q|&BK2BHI_9Ai3QrPo_SXQQ}#Qpsc-P{z1UjPUA3Q=z@FA)7{}eC z7$eJC#)}}YRWY*$%8kf9Oo?sM5gY1@rYS9vh>a0N8~Nc#XqVF`)Q#-9hYTT#H)-)T zYs5>6rm~7nEk0LN^WdIx(^Qw=!gz~ITdCcS|Aiaw+P}N#F;Ab3I94RtBm+2V0FgVX z1$bb}Ns%0wIMP!0f`+-$F|GNLU&P_ix*dO-{;~V;*J0KQ^24?NjOEW5Cuj*EX`WUN zx-+cF%THbO>+ce6vae>JjB>u}F_Q|t#Kw3{`%4#PSdcLTyYqM(nm1w5JL?>*FIH0! zOQ@TF-jwAQ-X=$0>!^`B{UitBf*#G5GOWUk9=e82dZK+Ch^pGzfVhNd@wn0UURr>7>#~texWuRMrxfoBC(tg97_d*p zw5sgD1BhBF<$Sc0)yNR?y^ho&eA*s@q^2hG#O>!5i|!vc8mRO42VXibxp5!6Z{G>{ z0USsK*=oRWomp`v#0U(q+;*K>84amf^e~6lm`Sc4CJEP9nxDKZ;+f?e_2rgiL;^^T zi=l@{I4&5Ixrrk?HbksAYi324V!vZS`E5DLuz3vxuEZ3KutZ8U_QpK6b1c?z$)i&m zrPe!@`OiEHMaEPI3eKZ%I&dJ^xzT2F9OC-Dc=F|m#S1LS-2q%SaFnGSxbk04z)I1*2G!Y!PcD+1#% zaTshyeIVrT0h-{&E``oE<9Jv=RYG^Qv-hGuYq4v$M=o-RKGfUTU09@+PJ(1yDtzrp zx8dG$h+{{d-DJzl2SV|Hw(^l8{_|jzn1X1p!*AWpgEX89sEF=(>UFlIVorBOf zLYc521ZR*90V^AG`{(rK?#Axa>a-O)iQ4v;-I-^9SX3C0{($ZLWqVdJCaO=g{7=xDY4czqlj=PRQZ2pFu(h zb-lRxhe5kXqdFe&91m%|nrn;fOD=fzIW_$=Sj0mJfcG$#b`nE6^cv|nS>I*FoqC61 zI$Ij~g9q*vGOoXTdFuSUJAa6jvmkHM{_tuQ8>$NouqcU(BIq*f}l37=~UXfb5J z{2^JnlgGz%p1-e`+c`3!!EEiKTzdIcW5<{XY6-In2*l;cYtT&Sa*N*%py^%g zIxVwZo(&etg9sq*wZpUK2j=H5sO6P-gn2IJU)p7wwznrut*F_$&8psXzG!jO+4(3N z`)BrE><4d}Qp89#Qju1&T7UI$mwiRdnxm(SzT)_A`J;-i;WHc*>&iBV?r)Gv^6m(J zp^}QCt*zoyV6AuJ?6bPgP^2ULD``*8x5q~((cm0vZ^M9BV#PNITo8m{pQq~#Qkb$u zM1aL%5Mn`%z_;vX{(@mNeXq8~pj78bX8bnPWM%V4+2jMkD^?%gVXI74|7}6!V0!;T z^q{9NU3YspE;H!5QwZmr?hVh;`!7W}^Y5#Fc#*Ndr>b-tXV?X9dMXig1n{-B3i$r` zGxs+wpm$e{*0!~p`+$hc_EPw~ClKWG7VS9mCq4x(S8TY>OR?*}ISV!0pu2Wfc>tW#h{U$(}6KyV|uXh9S#i#LF7zQk~ttf0u35yrHH z#t=0tLb~G(p?ZscqBcDHN`aG}SI;USRHXVOKw=}+l!M$(GWeHTp?}V#3n!S`kd7=> z`o86^)UJ;K>ElM5w`}rPxP4xpJGBZSX?-1|K24@p(aeL^m{xS7D|0n(yXcnr{&!Cl ze^@c9z18-+=*h>i;rqL%5fAoU6;e$7~OG zy&Sh@vXI`aG9=nDbYt1|@yRkaEd;fo~YvGS`pEIUS=mEU%i` z&(0aA=jy`27h+vslSw?e6|P-Guu(kAB`f?uP!0gBUp^Bm1a4#IZwn<#=Vf-q5+}r# z7-qDbwc1Mb^|@UITi@dY`C>=RQU`SuSVsnBRgXGbcx_WlY098-K#FWI1m%LYfkFM? z^5<(5lJEg^??P()%Z7;c{d~mo2AsZ~z4g@RKypwkV}*xyjSzy7W}N@>e6l6PD$@Wc zzq(5wU9yrsWhu41{FUuh73R_u#Xh@BWfc%wiop(-4pk>sURMpmYHixODGKy1{VHNB z?By9=Cytr|b;Ar>|d=Io~xK+I2>{Gvj5fHx(F-5`bF#6CJ6k4we* zkH=qPK0_+f&&Sk^z=;|G11mh~{W7i@2X}iHQu{Cews|Qf5#^Shy``P;RcM!551{qp zA?l#&BsCIufA#@IWS4*?Nj0E8t;lwMLEs3-$R}O|1u!cGrWk10yx+&E3tc&{d|V&G zdBeob_O#~tsMlspPlNaCS%w2S^T)wfUolJ=X>kHu?d5en;nltA)wj(tN`c1j4fdaZ zzTek-EV;pwof$aS!^4oKxMsKxt*DUY6M?$z2T5AHdYv9wjV(U6f)oQ*LHqrm-3*M- z&#s7gGRAgR!(&L=30+J9L(fx=oe9+Kvg4{G<%zQjS8CM zK>~%3ehF`vOt;;^1kW=u5r>9%oA(<7fc$oOpT$n&HSTdB5HZg;2$c)~>m>jKZn{S{ z$wFX`hZ5!cL1_>LZ*}U%fSB%Xl8qQ7BTe_C_Qw|<3VCl;pYfCA7q2!?-Kjql()iNb zoHNMeefD{kA}8*LmOMP&O^fDdKk0_7?q*^d1zQs+5e{HmXuz=Trdh0+L^=f%`K^KxE439g)jW<-w~kcV{0hjGJo&>5_E-Bfce>Da8&2{bJ`ZTY4vtM^_2_HRy#aKIxHO(V_E6sWk!3~Ctu@!tNlziF6?kn(ETfK?x8j02Kk%r<{Mu z8@oGS$n@37iR@4k(t+H+8N%cqijwGG*qr_4QKD&(6`_vl9DC^}$}xP#=Y!>`wj8=J z;|c{kxXXjQz^rBI*ilU9dR>qIww&^r()g2Q9+i5@{;ool$QwVG1=p9u#MDQu91tiu z%`o}L&qA1$tdpqE-T?VwLMKbYN!kfEkMsN0GsG+jeHcKJ4~gx$z5MmpbZGd*^{ie@ zGt!Hn`5dK&jCr7MV%_9)|)#itRoJ!Q}Do1S9k z!~E@~Q6Jh4aLMU|?~op=lDek(RX2hfJ#1@6)vMiQmzA=o_=`Usg*&Tk@^)p?UC=s4 z93cQ$dNr$nr=9*c=s)i^pC=7V0K+h+yOb+DJg+Zpw;h?_B!4|$V4;rC_Pgif3<}ee z4v!;2sNhiDKbtAJotYa2I|!W#`5%4yaolY@=#ODQC^DWDl`Nl`E@x1m?%a{P@T(-&cizV;4>z(J44&4|YnJLSRf8;>`vW5|)(?fz>tm!to!Ev+ostT~gs> zO921;|N0LIHY9jS&fPC9^#F?(Ohn!85MMu+`{d;SvGa*XU64eeN)qD8b>q83$3+@) zt8|+R4l5*QvXbjSq7h*6d?$NTFH@)$6dA&&RKGq$o z;)mYjWmmW4Sv#xv^8h_*$F70qdjUbQ&!HWTuq(FT_hFx6FZ5|Z8NyUytCjd>e6JP+ zH4Hn#xVDN-E0-d(TK$=Y>)?clGes|EOmEi($?Qj55b5}7>3>JKNJ*Xt>w}(q1Tj@o zNcu6m6+K^V6SZb^RR8q!+1hO~H|wzPf7s46vo>(dQPR2;gT9moLyj*lM-lILyeNQh3n^K_B+S=XvI{f*utEnTU z6@nXwwZ$Gz@Z-tW%R<)Stil&D6u2hgW_l)~4X`q{FC~rv905(UZFZqo{x+MIB^zPlP^6|PfarcK#Y~7Md@^+ z{f(fXVSOk+I=P1xjfv{luo^s9ld)cIqID&A!Qu+7XZ*mQG}i8a*l;Ziq#fS? z*{lzZz}K-#;M*|v+-z5T5M7M52#A>~F}$bu4zpyDHyful)%WNg?%12n-P5;(OeEt(wxaMBk;Nw^nT2R3+*&q3JmE zvvT%Gv>6hlowaM(Z3^EA>7b=@KZ2qnO(R4ZyI|#( zca3h&S(mZeilwe6zL?7(`K7^3EUzjPk`E1@V9VRJsD=3VG23+jrLZn%^}0Q4c`P?a{@y z(R2K-Z!O;{QL?0WdfHzwgI-61Kwwf5Qk;U%)w54O_>@CLu>C-(9=qpCu`F1K?5X}} zX3_S@ICE%>?MYjjlB!W=GJJ zcwU(^ChL#vr*jmu1=Pnt0fu;?(`PLf8yLQF;MC|z1Jw-rk6BWg60RNb_uZs?_=@LS zlZv65Tjo#muj8AkXnzBS*Z{S3R`ZxuPsA6#a0K%J16#Wy4EAl(~?&~ zn#POoOAn~AaI{k#IFL0>Se{9IY+1sq{Zgu=B*WR6v-t>{(%jb8&KBYjh9MS0t!{5M z7efRQ9$dn*brtJ$8q73{B#dIOgNv7fbR^gG+s|X%Dco6IP~Wx3TA?I$c+0q*!PoAY z1}{TRZqNKXfL5QQ8=I8P5}WY>p2Z80d9?l%672OB(7bpaP z=cQoex?%xxyWMmv{xGe7cxgFDWw11Sx}mz=5n>~f{_qGpcZfK==9o3V6^wG4%AjeH zZSh3GM)Hb);$XSX3{tydZzf=6raNH~#s32#2h_o`zc z;+|CYhOGFlj1*M_I$m?tRe|Qs5ZT=BpIdMp$-;yD3^`{BY5ApU+PETv)xRwTw14H& z?s2~n?+gk-PGQpaDCFoqK(Y%K{I`Y>o!P<+{iWnNc>Sd6lIzpwOZZB z`9QOKb z*;dkS{=x7B3h0+q2G<+GsDlodU(_6Fad>Rzt-coVYvT%UJ}B}225p6bvyQ;ql9R<1 zh&uh`Dup}S7*1e{7zwD@rjrip*GBy%zGwT->}d7nfAw$9CS>db!?2cFG+B$qdvYxn z31@cJ&i_COPQzQeA(xWu&Tp<=En0mza_BW;Blh{3hs~i7HbSl?3dKaLw}P#_%vy9m zJ_FYxH;#Mo2bQxU0Zi@O%M-nn(>d^0{(J)Fir{+2b8Wrw(`?U@4)>2}qFTu-HLGJn zG_~k#ABxzU3w0~B<5O~q6Q}ql9!oo=M>ATr>z)cmag$2f=#o@``Km_(HCbODv?9Rz zJY{T7Xm^_VV;B7S>yM~-+BGGmH+>4(b+Ym@Qc?$(Kx=_V*_qRWP_m2XEqbqD;f3c& zn1{WnE%!KdG3Tq!kQ!D#Fnf_~qi_t`AAV5yzX^z7ZO?|*^5HoC@0Yp-loK@oW|w@y z?tmZ$PtAOnA4?PL(MIS7MmvY{K8SYIr;8zPIRK|U89unH{kv(c3o`NV%cVGsEQgdF z>svq9)%Jnk{kbH88_(|>PY_i4@M-^HGn!yVu7=_bkpT zH8=sXe*E!ZD%~2M*OVQ391Ntcx9^AXGmPZXFScDpmho2V(<|LG)2cSoK@IDr?gpyE zQW@KcqZ4X`iTTsiSTc4%BVhGY{^~c6zH@s6%br25u9B|BEM($c3SWtz_7NxXUzgxF z--RvBS%J~%fm65uOmfe0+DJpt^p9CnIlwl$V0O7kxsW6&?2+?=<&dnZVv>lxKn{2S zX9TP=`G)l$wsuLAQtKJvhKJT{Ulu#NC}!XPdiI&nlO9pj00_SKX^9W4<)yFi`w^<;LEf@({^EZ%NHR&>SyOnmIIO&z5Fv9}pdNup}%o{o3x8 zQAUH(u=x6Xij(7G|p{J*UB;ulB>Gjy^AqozEJlSHZ!it zf1Y?56tn_jreV2AB< zCb^9wN2d-B*Eom1QohRXVH>W#v zI9$OaR_ST$JATtY%Cgx>gCatoA2K*-cHG(EM8iXRmWU%Xh#g$fqBDN1Cd5M}qkpm} zDD(0q5x$QN%)bGpKo09{jA$=Z#F&R%=~+zZvZ9EDylr`VGo=IGm@;l$@ZQ?V;;6&u zt&iGOT#9qwARqTI|Gtk?<`fwCd`U$nC{9rFQtKPk|19pBM*dRhaIq;Ib?4N2YsBB7 zBej~VHe56S(c*}kL%)9taR7{f6dXs7D1)bQ_8u;!M?Pzy_&SqOTC{$|_VnPKqpFLa zjpwZL!n4C`yqR3$7ICS2ImI>p;nhD}D9a0;!;^OWFO_nwm*9T)?xeYJCLQjRm2L%5 zJpm9a?bCtXvUBxyKtF5<9AC8=RB}BazOn03*0NVTPQ{yK3>++He zOl8}Wd*}3Vz6qzM6P|JiEPgoI7Pzd7*E!W&Sa8J#>xfkVqa}nmVjx7TL{qVlrX_<6 z)^WRN2{gYp+OAEzq^7`~hc}~=*HGO(P3-<4n-gVZheQq_+V|JPRxvq@GxBw-<0sV4 z!qvUvQvxOWIHTx*rec18%SD-J9s}KiqYpm{mB##~9%Z6URf0uAybQs%wXIG$r~Ii_ z^^DfSca0q}<(|=;;f?(BIa81x`~AR)LQH+&Ga(6@3K)_g%Pjk&h8038keAL0bThIv zW)j!SH#aRfPnHs+V!cDJe9>sV8 Identifier of the chain - --key-file Path to the key file - --mnemonic-file Path to file containing mnemonic to restore the key from - --secret-file Path to file containing hex-encoded secret key to restore from + --chain + Identifier of the chain + + --key-file + Path to the key file + + --mnemonic-file + Path to file containing mnemonic to restore the key from + + --secret-file + Path to file containing hex-encoded secret key to restore from diff --git a/guide/src/templates/help_templates/version.md b/guide/src/templates/help_templates/version.md index e69de29bb..ed6f70cb8 100644 --- a/guide/src/templates/help_templates/version.md +++ b/guide/src/templates/help_templates/version.md @@ -0,0 +1,8 @@ +DESCRIPTION: +The `version` subcommand, retained for backward compatibility + +USAGE: + forcerelay version + +OPTIONS: + -h, --help Print help information From f8810ba10759ed57be370630be157222a014e189 Mon Sep 17 00:00:00 2001 From: ashuralyk Date: Thu, 14 Sep 2023 20:38:16 +0800 Subject: [PATCH 6/7] chore: apply suggestions from code review Co-authored-by: Flouse <1297478+Flouse@users.noreply.github.com> --- README.md | 6 +++--- crates/relayer-cli/src/commands/keys/add.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 84e6e8b74..5e5449e98 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,12 @@ Forcerelay is an IBC-Compatible bridge that aims to open up the Nervos ecosystem and the Cosmos ecosystem, and it also serves as a standard cross-chain solution within the Nervos ecosystem. -Forcerelay is built on [Hermes](https://github.com/informalsystems/hermes), this means we will keep continue to track and update the latest version of Hermes, and won't stop it on any specific old version. +Forcerelay is built on [Hermes](https://github.com/informalsystems/hermes), and will continuously adapt to newer `Hermes` versions. At present, Forcerelay exclusively supports Axon, CKB, and Cosmos-SDK chains, prioritizing their seamless operation. While it currently doesn't encompass other well-established EVM chains, such as Ethereum, Arbitrum, and BSC, this is primarily due to the intricacies of running a light-client from these chains on EVM. Nevertheless, our roadmap includes plans for implementing mainstream EVM chains, and we'll keep you informed on our progress in this regard. ## Progress Tracking -Forcerelay is actively under development, and we welcome any issues and pull requests. Here's an overview of our current progress: +Forcerelay is under active development, and we welcome any issues and pull requests. Here's an overview of our current progress: - [x] Implement connection and channel layer of IBC protocol between Axon and CKB - [ ] Upgrade the underline Hermes from v1.4.0 to the latest v1.6.0 - [ ] Implement packet layer of IBC protocol between Axon and CKB @@ -58,7 +58,7 @@ Unlike Axon, business modules cannot be registered directly with a contract on C It's important to note that the IBC port on CKB corresponds to the `LOCK_HASH` of your wallet cell on CKB, which we will refer to as `WALLET_LOCK_HASH` for future use. ### Installation and Setting -We recommand you to download the pre-compiled binary, or you can compile mannully from the source code, which requires `Rust ^v1.56.0` installed: +We recommand you to download the pre-compiled binary, or you can compile mannully from the source code, which requires `Rust ^v1.72.0` installed: ``` $ git clone https://github.com/synapseweb3/forcerelay diff --git a/crates/relayer-cli/src/commands/keys/add.rs b/crates/relayer-cli/src/commands/keys/add.rs index 3d39a04bc..786b232ea 100644 --- a/crates/relayer-cli/src/commands/keys/add.rs +++ b/crates/relayer-cli/src/commands/keys/add.rs @@ -38,7 +38,7 @@ use crate::conclude::Output; /// /// `keys add [OPTIONS] --chain --secret-file ` /// -/// The key-file and mnemonic-file flags can't be given at the same time, this will cause a terminating error. +/// The key-file, mnemonic-file, secret-file flags can't be given at the same time, this will cause a terminating error. /// If successful the key will be created or restored, depending on which flag was given. #[derive(Clone, Command, Debug, Parser, PartialEq, Eq)] #[clap( From 33b59baf053c20b0ad93a99dc514fd7fcbbe6b1a Mon Sep 17 00:00:00 2001 From: ashuralyk Date: Thu, 14 Sep 2023 20:38:46 +0800 Subject: [PATCH 7/7] chore: update README.md Co-authored-by: Flouse <1297478+Flouse@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e5449e98..505960c5d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?logo=apache)](LICENSE) -Forcerelay is an IBC-Compatible bridge that aims to open up the Nervos ecosystem and the Cosmos ecosystem, and it also serves as a standard cross-chain solution within the Nervos ecosystem. +Forcerelay is an IBC-Compatible bridge that aims to connect the Nervos ecosystem and the Cosmos ecosystem, and it also serves as a standard cross-chain solution within the Nervos ecosystem. Forcerelay is built on [Hermes](https://github.com/informalsystems/hermes), and will continuously adapt to newer `Hermes` versions.