From 30d26ddd93708416cda9ff4e6c50e90df2a92692 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Fri, 14 Jun 2024 19:34:03 -0300 Subject: [PATCH 01/18] fix: remove `.as_ref` in order to compile It still needs further investigation why it's needed, but it seems that CI is unable to work as it's. It shouldn't be necessary! --- gateway/ln-gateway/src/lightning/lnd.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/gateway/ln-gateway/src/lightning/lnd.rs b/gateway/ln-gateway/src/lightning/lnd.rs index 75076fe10e7..fa31fe9053a 100644 --- a/gateway/ln-gateway/src/lightning/lnd.rs +++ b/gateway/ln-gateway/src/lightning/lnd.rs @@ -1169,7 +1169,6 @@ impl ILnRpcClient for GatewayLndClient { funding_txid: Some( tonic_lnd::lnrpc::channel_point::FundingTxid::FundingTxidBytes( >::as_ref(&channel_point.txid) - .as_ref() .to_vec(), ), ), From f8679beb91c2df838dcab050aae576a36701938a Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Mon, 10 Jun 2024 23:47:03 -0300 Subject: [PATCH 02/18] refactor(api)!: add new `Connector` enum feat(api): add new `Connector` enum with `Tcp` and `Tor` variants - create a new `fedimint-api-client::api::Connector` enum that currently have two variants: `Connector::Tcp` and `Connector::Tor`, for establishing connections over clearnet (Tcp), and Tor network, respectively. - implements `Default` to `Connector`, currently resolves to `Tcp` variant. - add new field `connector: Connector` to `FederationPeer`, and `FederationPeerClient`, uses it to select which `JsonRpcClient` method to use. - update `WsFederationApi` methods to expect the `connector: Connector` parameter. - update the `DynGlobalApi` methods to use the `Connector::default()` when creating a new inner `WsFederationApi`. refactor(client): add/use `Connector` parameter throughout `fedimint-client` - add the usage of newly added `Connector` to both `fedimint-client`, through new `connector: Connector` field on both `ClientBuilder` and `Client` - add new `with_connector()` and `with_tor_connector` methods to `ClientBuilder`. --- Cargo.lock | 7876 +++++++++++------ deny.toml | 3 + fedimint-api-client/Cargo.toml | 2 + .../src/api/federation_peer_client.rs | 52 +- fedimint-api-client/src/api/mod.rs | 221 +- fedimint-api-client/src/lib.rs | 20 +- fedimint-cli/src/envs.rs | 3 + fedimint-cli/src/lib.rs | 43 +- fedimint-cli/src/utils.rs | 5 + fedimint-client-wasm/src/lib.rs | 6 +- fedimint-client/src/lib.rs | 23 +- fedimint-load-test-tool/src/common.rs | 6 +- fedimint-load-test-tool/src/main.rs | 12 +- fedimint-server/src/config/mod.rs | 2 + fedimint-server/src/consensus/mod.rs | 11 +- fedimint-server/src/net/api/announcement.rs | 10 +- fedimint-testing/src/federation.rs | 5 +- fedimint-wasm-tests/src/lib.rs | 6 +- gateway/ln-gateway/src/client.rs | 7 +- misc/git-hooks/pre-commit | 1 + nix/flakebox.nix | 1 + 21 files changed, 5345 insertions(+), 2970 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 79899645c4d..66985d520bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,6 +26,7 @@ dependencies = [ "cfg-if", "cipher", "cpufeatures", + "zeroize", ] [[package]] @@ -118,6 +119,50 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "amplify" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e711289a6cb28171b4f0e6c8019c69ff9476050508dc082167575d458ff74d0" +dependencies = [ + "amplify_derive", + "amplify_num", + "ascii", + "wasm-bindgen", +] + +[[package]] +name = "amplify_derive" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759dcbfaf94d838367a86d493ec34ccc8aa6fe365cb7880d6bf89006de24d9c1" +dependencies = [ + "amplify_syn", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "amplify_num" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c009c5c4de814911b177e2ea59e4930bb918978ed3cce4900d846a6ceb0838" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "amplify_syn" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7736fb8d473c0d83098b5bac44df6a561e20470375cd8bcae30516dc889fd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -228,6 +273,54 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "arti-client" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +dependencies = [ + "async-trait", + "cfg-if", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "educe", + "fs-mistrust", + "futures", + "hostname-validator", + "humantime", + "humantime-serde", + "libc", + "postage", + "rand", + "safelog", + "serde", + "thiserror", + "tor-async-utils", + "tor-basic-utils", + "tor-chanmgr", + "tor-circmgr", + "tor-config", + "tor-dirmgr", + "tor-error", + "tor-guardmgr", + "tor-keymgr", + "tor-linkspec", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-rtcompat", + "tracing", + "void", +] + +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + [[package]] name = "assert_matches" version = "1.5.0" @@ -246,6 +339,19 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compression" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd066d0b4ef8ecb03a55319dc13aa6910616d0f44008a045bb1835af830abff5" +dependencies = [ + "flate2", + "futures-core", + "futures-io", + "memchr", + "pin-project-lite", +] + [[package]] name = "async-lock" version = "3.4.0" @@ -301,6 +407,49 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "async_executors" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a982d2f86de6137cc05c9db9a915a19886c97911f9790d04f174cede74be01a5" +dependencies = [ + "blanket", + "futures-core", + "futures-task", + "futures-util", + "pin-project", + "rustc_version", + "tokio", +] + +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "atomic" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" +dependencies = [ + "bytemuck", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -693,6 +842,17 @@ dependencies = [ "digest", ] +[[package]] +name = "blanket" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -725,18 +885,36 @@ dependencies = [ "zeroize", ] +[[package]] +name = "bounded-vec-deque" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2225b558afc76c596898f5f1b3fc35cfce0eb1b13635cbd7d1b2a7177dc10ccd" + [[package]] name = "bumpalo" version = "3.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "byte-slice-cast" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "bytemuck" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" + [[package]] name = "byteorder" version = "1.5.0" @@ -760,6 +938,11 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "caret" +version = "0.4.6" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" + [[package]] name = "cast" version = "0.3.0" @@ -855,6 +1038,7 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] @@ -887,7 +1071,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -953,6 +1137,17 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "coarsetime" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b3839cf01bb7960114be3ccf2340f541b6d0c81f8690b007b2b39f750f7e5d" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] + [[package]] name = "colorchoice" version = "1.0.0" @@ -1017,6 +1212,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "convert_case" version = "0.4.0" @@ -1130,6 +1331,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -1142,6 +1352,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -1153,4876 +1375,6619 @@ dependencies = [ ] [[package]] -name = "deranged" -version = "0.3.11" +name = "ctr" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "powerfmt", + "cipher", ] [[package]] -name = "derivative" -version = "2.2.0" +name = "curve25519-dalek" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", ] [[package]] -name = "derive_more" -version = "0.99.17" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version", - "syn 1.0.109", + "syn 2.0.72", ] [[package]] -name = "devimint" -version = "0.5.0-alpha" +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "anyhow", - "axum 0.7.5", - "bitcoincore-rpc", - "clap", - "cln-rpc", - "esplora-client", - "fedimint-aead", - "fedimint-api-client", - "fedimint-bitcoind", - "fedimint-build", - "fedimint-client", - "fedimint-core", - "fedimint-ln-client", - "fedimint-ln-gateway", - "fedimint-ln-server", - "fedimint-lnv2-client", - "fedimint-lnv2-common", - "fedimint-lnv2-server", - "fedimint-logging", - "fedimint-meta-server", - "fedimint-mint-server", - "fedimint-portalloc", - "fedimint-server", - "fedimint-testing", - "fedimint-tonic-lnd", - "fedimint-unknown-server", - "fedimint-wallet-client", - "fedimint-wallet-server", - "fedimintd", - "fs-lock", - "futures", - "hex", - "nix", - "rand", - "semver", - "serde", - "serde_json", - "tokio", - "tower-http", - "tracing", - "tracing-subscriber", - "url", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] -name = "digest" -version = "0.10.7" +name = "darling" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ - "block-buffer", - "crypto-common", - "subtle", + "darling_core 0.20.8", + "darling_macro 0.20.8", ] [[package]] -name = "dirs" -version = "5.0.1" +name = "darling_core" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ - "dirs-sys", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "darling_core" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.72", ] [[package]] -name = "either" -version = "1.10.0" +name = "darling_macro" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] [[package]] -name = "electrum-client" -version = "0.18.0" +name = "darling_macro" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bc133f1c8d829d254f013f946653cbeb2b08674b960146361d1e9b67733ad19" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ - "bitcoin 0.30.2", - "bitcoin-private", - "byteorder", - "libc", - "log", - "rustls 0.21.11", - "serde", - "serde_json", - "webpki", - "webpki-roots 0.22.6", - "winapi", + "darling_core 0.20.8", + "quote", + "syn 2.0.72", ] [[package]] -name = "email_address" -version = "0.2.5" +name = "data-encoding" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1019fa28f600f5b581b7a603d515c3f1635da041ca211b5055804788673abfe" -dependencies = [ - "serde", -] +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] -name = "encoding_rs" -version = "0.8.33" +name = "der" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ - "cfg-if", + "const-oid", + "pem-rfc7468", + "zeroize", ] [[package]] -name = "env_logger" -version = "0.10.2" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", + "powerfmt", + "serde", ] [[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.4.5" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "serde", - "typeid", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "errno" -version = "0.3.8" +name = "derive-adhoc" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "5283ac2881753c76c0892406705553f0d9ab30649f81e18964d3408f4501edb8" dependencies = [ - "libc", - "windows-sys 0.52.0", + "derive-adhoc-macros", + "heck 0.4.1", ] [[package]] -name = "esplora-client" -version = "0.6.0" +name = "derive-adhoc-macros" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb1f7f2489cce83bc3bd92784f9ba5271eeb6e729b975895fc541f78cbfcdca" +checksum = "c21b673a9b8c78c34908e6fcb42b922e11c4df2de5237f1c3f58d3285904a84b" dependencies = [ - "bitcoin 0.30.2", - "bitcoin-internals", - "log", - "reqwest 0.11.27", - "serde", + "heck 0.4.1", + "itertools 0.11.0", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "sha3", + "strum 0.25.0", + "syn 1.0.109", + "void", ] [[package]] -name = "event-listener" -version = "5.2.0" +name = "derive-deftly" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +checksum = "72f9bc3564f74be6c35d49a7efee54380d7946ccc631323067f33fabb9246027" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", + "derive-deftly-macros", + "heck 0.5.0", ] [[package]] -name = "event-listener-strategy" -version = "0.5.2" +name = "derive-deftly-macros" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "e1b84d32b18d9a256d81e4fec2e4cfd0ab6dde5e5ff49be1713ae0adbd0060c2" dependencies = [ - "event-listener", - "pin-project-lite", + "heck 0.5.0", + "indexmap 2.2.5", + "itertools 0.12.1", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "sha3", + "strum 0.25.0", + "syn 2.0.72", + "void", ] [[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" - -[[package]] -name = "fastrand" -version = "2.0.1" +name = "derive_builder_core_fork_arti" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "fedimint-aead" -version = "0.5.0-alpha" +checksum = "24c1b715c79be6328caa9a5e1a387a196ea503740f0722ec3dd8f67a9e72314d" dependencies = [ - "anyhow", - "argon2", - "hex", - "rand", - "ring", + "darling 0.14.4", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "fedimint-aleph-bft" -version = "0.36.0" +name = "derive_builder_fork_arti" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21015ab681cdddedd866fe4af9169901012e9a8bd4745da8423131cccae025" +checksum = "c3eae24d595f4d0ecc90a9a5a6d11c2bd8dafe2375ec4a1ec63250e5ade7d228" dependencies = [ - "aleph-bft-rmc", - "aleph-bft-types 0.13.0", - "anyhow", - "async-trait", - "derivative", - "futures", - "futures-timer", - "itertools 0.12.1", - "log", - "parity-scale-codec", - "parking_lot", - "rand", - "thiserror", + "derive_builder_macro_fork_arti", ] [[package]] -name = "fedimint-api-client" -version = "0.5.0-alpha" +name = "derive_builder_macro_fork_arti" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69887769a2489cd946bf782eb2b1bb2cb7bc88551440c94a765d4f040c08ebf3" dependencies = [ - "anyhow", - "async-lock", - "async-trait", - "base64 0.22.1", - "bitcoin 0.30.2", - "fedimint-core", - "fedimint-logging", - "futures", - "getrandom", - "gloo-timers 0.3.0", - "itertools 0.13.0", - "js-sys", - "jsonrpsee-core", - "jsonrpsee-wasm-client", - "jsonrpsee-ws-client", - "lru", - "rustls-pki-types", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-rustls 0.26.0", - "tokio-test", - "tracing", - "tracing-subscriber", - "wasm-bindgen-futures", - "webpki-roots 0.26.3", + "derive_builder_core_fork_arti", + "syn 1.0.109", ] [[package]] -name = "fedimint-bip39" -version = "0.5.0-alpha" +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "bip39", - "fedimint-client", - "fedimint-core", - "rand", + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", ] [[package]] -name = "fedimint-bitcoind" +name = "devimint" version = "0.5.0-alpha" dependencies = [ "anyhow", - "async-trait", - "bitcoin 0.30.2", + "axum 0.7.5", "bitcoincore-rpc", - "electrum-client", - "esplora-client", - "fedimint-core", - "fedimint-logging", - "hex", - "rand", - "serde", - "serde_json", - "tracing", - "url", -] - -[[package]] -name = "fedimint-build" -version = "0.5.0-alpha" -dependencies = [ - "serde_json", -] - -[[package]] -name = "fedimint-cli" -version = "0.5.0-alpha" -dependencies = [ - "anyhow", - "async-trait", - "base64 0.22.1", - "bip39", - "bitcoin 0.30.2", "clap", - "clap_complete", + "cln-rpc", + "esplora-client", "fedimint-aead", "fedimint-api-client", - "fedimint-bip39", + "fedimint-bitcoind", "fedimint-build", "fedimint-client", "fedimint-core", "fedimint-ln-client", - "fedimint-ln-common", + "fedimint-ln-gateway", + "fedimint-ln-server", "fedimint-lnv2-client", + "fedimint-lnv2-common", + "fedimint-lnv2-server", "fedimint-logging", - "fedimint-meta-client", - "fedimint-meta-common", - "fedimint-mint-client", - "fedimint-mint-common", - "fedimint-rocksdb", + "fedimint-meta-server", + "fedimint-mint-server", + "fedimint-portalloc", + "fedimint-server", + "fedimint-testing", + "fedimint-tonic-lnd", + "fedimint-unknown-server", "fedimint-wallet-client", + "fedimint-wallet-server", + "fedimintd", "fs-lock", "futures", "hex", - "itertools 0.13.0", - "lightning-invoice", + "nix", "rand", - "reqwest 0.12.5", + "semver", "serde", "serde_json", - "thiserror", - "time", "tokio", + "tower-http", "tracing", "tracing-subscriber", "url", ] [[package]] -name = "fedimint-client" -version = "0.5.0-alpha" +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "anyhow", - "aquamarine", - "async-stream", - "async-trait", - "bitcoin 0.30.2", - "fedimint-aead", - "fedimint-api-client", - "fedimint-build", - "fedimint-core", - "fedimint-derive-secret", - "fedimint-logging", - "futures", - "itertools 0.13.0", - "rand", - "reqwest 0.12.5", - "ring", - "serde", - "serde_json", - "strum", - "strum_macros", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "tracing-test", + "block-buffer", + "const-oid", + "crypto-common", + "subtle", ] [[package]] -name = "fedimint-client-wasm" -version = "0.5.0-alpha" +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ - "anyhow", - "async-stream", - "fedimint-api-client", - "fedimint-client", - "fedimint-core", - "fedimint-ln-client", - "fedimint-mint-client", - "futures", - "js-sys", - "serde_json", - "wasm-bindgen", - "wasm-bindgen-futures", + "dirs-sys", ] [[package]] -name = "fedimint-core" -version = "0.5.0-alpha" +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "anyhow", - "async-lock", - "async-recursion", - "async-trait", - "backon", - "backtrace", - "base64-url", - "bech32 0.11.0", - "bincode", - "bitcoin 0.29.2", - "bitcoin 0.30.2", - "bitcoin_hashes 0.12.0", - "bitvec", - "bls12_381", - "erased-serde", - "fedimint-derive", - "fedimint-logging", - "fedimint-threshold-crypto", - "futures", - "futures-util", - "getrandom", - "gloo-timers 0.3.0", - "hex", - "imbl", - "itertools 0.13.0", - "js-sys", - "jsonrpsee-core", - "jsonrpsee-wasm-client", - "lightning", - "lightning-invoice", - "macro_rules_attribute", - "miniscript", - "parity-scale-codec", - "rand", - "secp256k1 0.27.0", - "secp256k1-zkp", - "serde", - "serde_json", - "serdect", - "strum", - "strum_macros", - "test-log", - "thiserror", - "tokio", - "tokio-rustls 0.24.1", - "tokio-test", - "tracing", - "tracing-subscriber", - "url", - "wasm-bindgen-futures", + "dirs-sys", ] [[package]] -name = "fedimint-dbtool" -version = "0.5.0-alpha" +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "anyhow", - "bytes", - "clap", - "erased-serde", - "fedimint-aead", - "fedimint-build", - "fedimint-client", - "fedimint-core", - "fedimint-ln-client", - "fedimint-ln-gateway", - "fedimint-ln-server", - "fedimint-lnv2-client", - "fedimint-lnv2-server", - "fedimint-logging", - "fedimint-meta-client", - "fedimint-meta-server", - "fedimint-mint-client", - "fedimint-mint-server", - "fedimint-rocksdb", - "fedimint-server", - "fedimint-wallet-client", - "fedimint-wallet-server", - "futures", - "hex", - "serde", - "serde_json", - "strum", - "strum_macros", - "tokio", - "tracing", + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "fedimint-derive" -version = "0.5.0-alpha" +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "itertools 0.13.0", "proc-macro2", "quote", "syn 2.0.72", ] [[package]] -name = "fedimint-derive-secret" -version = "0.5.0-alpha" -dependencies = [ - "anyhow", - "bitcoin_hashes 0.11.0", - "bls12_381", - "fedimint-core", - "fedimint-hkdf", - "ring", - "secp256k1-zkp", -] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] -name = "fedimint-docs" -version = "0.5.0-alpha" +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] -name = "fedimint-dummy-client" -version = "0.5.0-alpha" +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "anyhow", - "async-trait", - "erased-serde", - "fedimint-api-client", - "fedimint-client", - "fedimint-core", - "fedimint-dummy-common", - "futures", - "rand", - "serde", - "strum", - "strum_macros", - "thiserror", - "tracing", + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", ] [[package]] -name = "fedimint-dummy-common" -version = "0.5.0-alpha" +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "anyhow", - "fedimint-core", - "serde", - "thiserror", + "pkcs8", + "signature", ] [[package]] -name = "fedimint-dummy-server" -version = "0.5.0-alpha" +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "anyhow", - "async-trait", - "erased-serde", - "fedimint-core", - "fedimint-dummy-common", - "futures", + "curve25519-dalek", + "ed25519", + "merlin", + "rand_core", "serde", - "strum", - "strum_macros", + "sha2", + "subtle", + "zeroize", ] [[package]] -name = "fedimint-dummy-tests" -version = "0.5.0-alpha" +name = "educe" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" dependencies = [ - "anyhow", - "fedimint-client", - "fedimint-core", - "fedimint-dummy-client", - "fedimint-dummy-common", - "fedimint-dummy-server", - "fedimint-logging", - "fedimint-testing", - "futures", - "rand", - "strum", - "tokio", - "tracing", + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "fedimint-empty-client" -version = "0.5.0-alpha" +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "electrum-client" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bc133f1c8d829d254f013f946653cbeb2b08674b960146361d1e9b67733ad19" dependencies = [ - "anyhow", - "async-trait", - "erased-serde", - "fedimint-api-client", - "fedimint-client", - "fedimint-core", - "fedimint-empty-common", + "bitcoin 0.30.2", + "bitcoin-private", + "byteorder", + "libc", + "log", + "rustls 0.21.11", "serde", - "strum", - "strum_macros", - "thiserror", + "serde_json", + "webpki", + "webpki-roots 0.22.6", + "winapi", ] [[package]] -name = "fedimint-empty-common" -version = "0.5.0-alpha" +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "anyhow", - "fedimint-core", - "serde", - "thiserror", + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", ] [[package]] -name = "fedimint-empty-server" -version = "0.5.0-alpha" +name = "email_address" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1019fa28f600f5b581b7a603d515c3f1635da041ca211b5055804788673abfe" dependencies = [ + "serde", +] + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-ordinalize" +version = "3.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "esplora-client" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cb1f7f2489cce83bc3bd92784f9ba5271eeb6e729b975895fc541f78cbfcdca" +dependencies = [ + "bitcoin 0.30.2", + "bitcoin-internals", + "log", + "reqwest 0.11.27", + "serde", +] + +[[package]] +name = "event-listener" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fedimint-aead" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "argon2", + "hex", + "rand", + "ring 0.17.8", +] + +[[package]] +name = "fedimint-aleph-bft" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b21015ab681cdddedd866fe4af9169901012e9a8bd4745da8423131cccae025" +dependencies = [ + "aleph-bft-rmc", + "aleph-bft-types 0.13.0", "anyhow", "async-trait", - "erased-serde", + "derivative", + "futures", + "futures-timer", + "itertools 0.12.1", + "log", + "parity-scale-codec", + "parking_lot", + "rand", + "thiserror", +] + +[[package]] +name = "fedimint-api-client" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "arti-client", + "async-lock", + "async-trait", + "base64 0.22.1", + "bitcoin 0.30.2", "fedimint-core", - "fedimint-empty-common", + "fedimint-logging", "futures", + "getrandom", + "gloo-timers 0.3.0", + "itertools 0.13.0", + "js-sys", + "jsonrpsee-core", + "jsonrpsee-wasm-client", + "jsonrpsee-ws-client", + "lru", + "rustls-pki-types", "serde", - "strum", - "strum_macros", + "serde_json", + "strum 0.26.3", + "thiserror", + "tokio", + "tokio-rustls 0.26.0", + "tokio-test", + "tracing", + "tracing-subscriber", + "wasm-bindgen-futures", + "webpki-roots 0.26.3", ] [[package]] -name = "fedimint-fuzz" +name = "fedimint-bip39" version = "0.5.0-alpha" dependencies = [ + "bip39", + "fedimint-client", "fedimint-core", - "fedimint-ln-common", - "fedimint-lnv2-common", - "fedimint-meta-common", - "fedimint-mint-common", - "fedimint-wallet-common", - "honggfuzz", + "rand", ] [[package]] -name = "fedimint-gateway-cli" +name = "fedimint-bitcoind" version = "0.5.0-alpha" dependencies = [ "anyhow", "async-trait", - "axum 0.7.5", "bitcoin 0.30.2", - "clap", - "clap_complete", - "fedimint-build", + "bitcoincore-rpc", + "electrum-client", + "esplora-client", "fedimint-core", - "fedimint-ln-gateway", "fedimint-logging", - "fedimint-mint-client", - "reqwest 0.12.5", + "hex", + "rand", "serde", "serde_json", - "tokio", "tracing", "url", ] [[package]] -name = "fedimint-hkdf" +name = "fedimint-build" version = "0.5.0-alpha" dependencies = [ - "bitcoin_hashes 0.12.0", + "serde_json", ] [[package]] -name = "fedimint-ln-client" +name = "fedimint-cli" version = "0.5.0-alpha" dependencies = [ "anyhow", - "aquamarine", - "async-stream", "async-trait", + "base64 0.22.1", + "bip39", "bitcoin 0.30.2", "clap", - "erased-serde", + "clap_complete", + "fedimint-aead", "fedimint-api-client", + "fedimint-bip39", + "fedimint-build", "fedimint-client", "fedimint-core", + "fedimint-ln-client", "fedimint-ln-common", + "fedimint-lnv2-client", "fedimint-logging", + "fedimint-meta-client", + "fedimint-meta-common", + "fedimint-mint-client", + "fedimint-mint-common", + "fedimint-rocksdb", + "fedimint-wallet-client", + "fs-lock", "futures", + "hex", "itertools 0.13.0", "lightning-invoice", - "lnurl-rs", "rand", "reqwest 0.12.5", - "secp256k1 0.27.0", "serde", "serde_json", - "strum", - "strum_macros", "thiserror", + "time", "tokio", "tracing", + "tracing-subscriber", + "url", ] [[package]] -name = "fedimint-ln-common" +name = "fedimint-client" version = "0.5.0-alpha" dependencies = [ "anyhow", + "aquamarine", + "async-stream", + "async-trait", "bitcoin 0.30.2", - "bitcoin_hashes 0.12.0", - "fedimint-client", + "fedimint-aead", + "fedimint-api-client", + "fedimint-build", "fedimint-core", - "fedimint-threshold-crypto", - "lightning", - "lightning-invoice", - "secp256k1 0.27.0", + "fedimint-derive-secret", + "fedimint-logging", + "futures", + "itertools 0.13.0", + "rand", + "reqwest 0.12.5", + "ring 0.17.8", "serde", - "serde-big-array", "serde_json", + "strum 0.26.3", + "strum_macros 0.26.4", "thiserror", + "tokio", + "tokio-stream", "tracing", + "tracing-test", ] [[package]] -name = "fedimint-ln-gateway" +name = "fedimint-client-wasm" version = "0.5.0-alpha" dependencies = [ "anyhow", - "aquamarine", - "assert_matches", "async-stream", - "async-trait", - "axum 0.7.5", - "bitcoin 0.30.2", - "bitcoin_hashes 0.12.0", - "clap", - "cln-plugin", - "cln-rpc", - "erased-serde", - "esplora-client", "fedimint-api-client", - "fedimint-build", "fedimint-client", "fedimint-core", - "fedimint-dummy-client", - "fedimint-dummy-common", - "fedimint-dummy-server", "fedimint-ln-client", - "fedimint-ln-common", - "fedimint-ln-server", - "fedimint-lnv2-client", - "fedimint-lnv2-common", - "fedimint-lnv2-server", - "fedimint-logging", "fedimint-mint-client", - "fedimint-rocksdb", - "fedimint-testing", - "fedimint-threshold-crypto", - "fedimint-tonic-lnd", - "fedimint-tpe", - "fedimint-unknown-common", - "fedimint-unknown-server", - "fedimint-wallet-client", "futures", - "hex", - "ldk-node", - "lightning", - "lightning-invoice", - "prost 0.13.1", - "rand", - "reqwest 0.12.5", - "secp256k1-zkp", - "serde", + "js-sys", "serde_json", - "strum", - "strum_macros", - "thiserror", - "tokio", - "tokio-stream", - "tonic 0.12.1", - "tonic-build 0.12.1", - "tower-http", - "tracing", - "url", + "wasm-bindgen", + "wasm-bindgen-futures", ] [[package]] -name = "fedimint-ln-server" +name = "fedimint-core" version = "0.5.0-alpha" dependencies = [ "anyhow", - "assert_matches", + "async-lock", + "async-recursion", "async-trait", + "backon", + "backtrace", + "base64-url", + "bech32 0.11.0", + "bincode", + "bitcoin 0.29.2", + "bitcoin 0.30.2", "bitcoin_hashes 0.12.0", + "bitvec", + "bls12_381", "erased-serde", - "fedimint-bitcoind", - "fedimint-core", - "fedimint-ln-common", - "fedimint-metrics", - "fedimint-server", + "fedimint-derive", + "fedimint-logging", "fedimint-threshold-crypto", "futures", + "futures-util", + "getrandom", + "gloo-timers 0.3.0", + "hex", + "imbl", + "itertools 0.13.0", + "js-sys", + "jsonrpsee-core", + "jsonrpsee-wasm-client", + "lightning", + "lightning-invoice", + "macro_rules_attribute", + "miniscript", + "parity-scale-codec", "rand", "secp256k1 0.27.0", + "secp256k1-zkp", "serde", - "strum", - "strum_macros", + "serde_json", + "serdect", + "strum 0.26.3", + "strum_macros 0.26.4", "test-log", + "thiserror", "tokio", + "tokio-rustls 0.24.1", + "tokio-test", "tracing", + "tracing-subscriber", + "url", + "wasm-bindgen-futures", ] [[package]] -name = "fedimint-ln-tests" +name = "fedimint-dbtool" version = "0.5.0-alpha" dependencies = [ "anyhow", - "assert_matches", - "bitcoin_hashes 0.12.0", + "bytes", + "clap", + "erased-serde", + "fedimint-aead", + "fedimint-build", "fedimint-client", "fedimint-core", - "fedimint-dummy-client", - "fedimint-dummy-common", - "fedimint-dummy-server", "fedimint-ln-client", - "fedimint-ln-common", + "fedimint-ln-gateway", "fedimint-ln-server", + "fedimint-lnv2-client", + "fedimint-lnv2-server", "fedimint-logging", - "fedimint-testing", - "fedimint-threshold-crypto", + "fedimint-meta-client", + "fedimint-meta-server", + "fedimint-mint-client", + "fedimint-mint-server", + "fedimint-rocksdb", + "fedimint-server", + "fedimint-wallet-client", + "fedimint-wallet-server", "futures", - "lightning-invoice", - "rand", - "secp256k1 0.27.0", + "hex", + "serde", "serde_json", - "strum", + "strum 0.26.3", + "strum_macros 0.26.4", "tokio", "tracing", ] [[package]] -name = "fedimint-lnv2-client" +name = "fedimint-derive" +version = "0.5.0-alpha" +dependencies = [ + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "fedimint-derive-secret" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "bitcoin_hashes 0.11.0", + "bls12_381", + "fedimint-core", + "fedimint-hkdf", + "ring 0.17.8", + "secp256k1-zkp", +] + +[[package]] +name = "fedimint-docs" +version = "0.5.0-alpha" + +[[package]] +name = "fedimint-dummy-client" version = "0.5.0-alpha" dependencies = [ "anyhow", - "aquamarine", - "async-stream", "async-trait", - "bitcoin 0.30.2", - "clap", "erased-serde", "fedimint-api-client", "fedimint-client", "fedimint-core", - "fedimint-lnv2-common", - "fedimint-tpe", + "fedimint-dummy-common", "futures", - "itertools 0.13.0", - "lightning-invoice", "rand", - "reqwest 0.12.5", - "secp256k1 0.27.0", "serde", - "serde_json", + "strum 0.26.3", + "strum_macros 0.26.4", "thiserror", "tracing", ] [[package]] -name = "fedimint-lnv2-common" +name = "fedimint-dummy-common" version = "0.5.0-alpha" dependencies = [ "anyhow", - "bitcoin 0.30.2", - "bitcoin_hashes 0.12.0", - "fedimint-client", "fedimint-core", - "fedimint-ln-common", - "fedimint-tpe", - "group", - "secp256k1 0.27.0", "serde", - "serde_json", "thiserror", ] [[package]] -name = "fedimint-lnv2-server" +name = "fedimint-dummy-server" version = "0.5.0-alpha" dependencies = [ "anyhow", "async-trait", - "bls12_381", "erased-serde", - "fedimint-bitcoind", "fedimint-core", - "fedimint-lnv2-common", - "fedimint-server", - "fedimint-tpe", + "fedimint-dummy-common", "futures", - "group", - "rand", "serde", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", ] [[package]] -name = "fedimint-lnv2-tests" +name = "fedimint-dummy-tests" version = "0.5.0-alpha" dependencies = [ "anyhow", - "async-trait", - "clap", - "devimint", "fedimint-client", "fedimint-core", "fedimint-dummy-client", "fedimint-dummy-common", "fedimint-dummy-server", - "fedimint-ln-client", - "fedimint-ln-common", - "fedimint-ln-server", - "fedimint-lnv2-client", - "fedimint-lnv2-common", - "fedimint-lnv2-server", - "fedimint-testing", - "itertools 0.13.0", - "lightning-invoice", - "semver", - "serde_json", - "substring", - "tokio", - "tracing", -] - -[[package]] -name = "fedimint-load-test-tool" -version = "0.5.0-alpha" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bitcoin 0.30.2", - "clap", - "devimint", - "fedimint-api-client", - "fedimint-build", - "fedimint-client", - "fedimint-core", - "fedimint-ln-client", - "fedimint-ln-common", "fedimint-logging", - "fedimint-mint-client", - "fedimint-rocksdb", - "fedimint-wallet-client", + "fedimint-testing", "futures", - "jsonrpsee-core", - "jsonrpsee-types", - "jsonrpsee-ws-client", - "lightning-invoice", "rand", - "serde", - "serde_json", + "strum 0.26.3", "tokio", "tracing", - "url", -] - -[[package]] -name = "fedimint-logging" -version = "0.5.0-alpha" -dependencies = [ - "anyhow", - "console-subscriber", - "opentelemetry 0.24.0", - "opentelemetry-jaeger", - "tracing-opentelemetry", - "tracing-subscriber", ] [[package]] -name = "fedimint-meta-client" +name = "fedimint-empty-client" version = "0.5.0-alpha" dependencies = [ "anyhow", "async-trait", - "clap", "erased-serde", "fedimint-api-client", "fedimint-client", "fedimint-core", - "fedimint-meta-common", - "futures", + "fedimint-empty-common", "serde", - "serde_json", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "thiserror", - "tracing", ] [[package]] -name = "fedimint-meta-common" +name = "fedimint-empty-common" version = "0.5.0-alpha" dependencies = [ "anyhow", "fedimint-core", - "hex", "serde", - "serde_json", "thiserror", ] [[package]] -name = "fedimint-meta-server" +name = "fedimint-empty-server" version = "0.5.0-alpha" dependencies = [ "anyhow", "async-trait", "erased-serde", "fedimint-core", - "fedimint-logging", - "fedimint-meta-common", + "fedimint-empty-common", "futures", - "rand", "serde", - "strum", - "strum_macros", - "tracing", + "strum 0.26.3", + "strum_macros 0.26.4", ] [[package]] -name = "fedimint-meta-tests" +name = "fedimint-fuzz" version = "0.5.0-alpha" dependencies = [ - "anyhow", - "devimint", "fedimint-core", - "semver", - "serde_json", - "tokio", - "tracing", + "fedimint-ln-common", + "fedimint-lnv2-common", + "fedimint-meta-common", + "fedimint-mint-common", + "fedimint-wallet-common", + "honggfuzz", ] [[package]] -name = "fedimint-metrics" +name = "fedimint-gateway-cli" version = "0.5.0-alpha" dependencies = [ "anyhow", + "async-trait", "axum 0.7.5", + "bitcoin 0.30.2", + "clap", + "clap_complete", + "fedimint-build", "fedimint-core", - "prometheus", + "fedimint-ln-gateway", + "fedimint-logging", + "fedimint-mint-client", + "reqwest 0.12.5", + "serde", + "serde_json", "tokio", "tracing", + "url", ] [[package]] -name = "fedimint-mint-client" +name = "fedimint-hkdf" +version = "0.5.0-alpha" +dependencies = [ + "bitcoin_hashes 0.12.0", +] + +[[package]] +name = "fedimint-ln-client" version = "0.5.0-alpha" dependencies = [ "anyhow", "aquamarine", "async-stream", "async-trait", - "base64 0.22.1", - "base64-url", - "bincode", - "bitcoin_hashes 0.12.0", - "bls12_381", + "bitcoin 0.30.2", "clap", - "criterion", "erased-serde", "fedimint-api-client", "fedimint-client", "fedimint-core", - "fedimint-derive-secret", + "fedimint-ln-common", "fedimint-logging", - "fedimint-mint-common", - "fedimint-tbs", - "fedimint-threshold-crypto", "futures", - "hex", "itertools 0.13.0", - "secp256k1-zkp", + "lightning-invoice", + "lnurl-rs", + "rand", + "reqwest 0.12.5", + "secp256k1 0.27.0", "serde", - "serde-big-array", "serde_json", - "serdect", - "strum", - "strum_macros", - "test-log", + "strum 0.26.3", + "strum_macros 0.26.4", "thiserror", "tokio", "tracing", ] [[package]] -name = "fedimint-mint-common" +name = "fedimint-ln-common" version = "0.5.0-alpha" dependencies = [ "anyhow", - "bincode", + "bitcoin 0.30.2", "bitcoin_hashes 0.12.0", + "fedimint-client", "fedimint-core", - "fedimint-tbs", - "secp256k1-zkp", + "fedimint-threshold-crypto", + "lightning", + "lightning-invoice", + "secp256k1 0.27.0", "serde", + "serde-big-array", + "serde_json", "thiserror", "tracing", ] [[package]] -name = "fedimint-mint-server" +name = "fedimint-ln-gateway" version = "0.5.0-alpha" dependencies = [ "anyhow", + "aquamarine", "assert_matches", + "async-stream", "async-trait", + "axum 0.7.5", + "bitcoin 0.30.2", + "bitcoin_hashes 0.12.0", + "clap", + "cln-plugin", + "cln-rpc", "erased-serde", + "esplora-client", + "fedimint-api-client", + "fedimint-build", + "fedimint-client", "fedimint-core", + "fedimint-dummy-client", + "fedimint-dummy-common", + "fedimint-dummy-server", + "fedimint-ln-client", + "fedimint-ln-common", + "fedimint-ln-server", + "fedimint-lnv2-client", + "fedimint-lnv2-common", + "fedimint-lnv2-server", "fedimint-logging", + "fedimint-mint-client", + "fedimint-rocksdb", + "fedimint-testing", + "fedimint-threshold-crypto", + "fedimint-tonic-lnd", + "fedimint-tpe", + "fedimint-unknown-common", + "fedimint-unknown-server", + "fedimint-wallet-client", + "futures", + "hex", + "ldk-node", + "lightning", + "lightning-invoice", + "prost 0.13.1", + "rand", + "reqwest 0.12.5", + "secp256k1-zkp", + "serde", + "serde_json", + "strum 0.26.3", + "strum_macros 0.26.4", + "thiserror", + "tokio", + "tokio-stream", + "tonic 0.12.1", + "tonic-build 0.12.1", + "tower-http", + "tracing", + "url", +] + +[[package]] +name = "fedimint-ln-server" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "assert_matches", + "async-trait", + "bitcoin_hashes 0.12.0", + "erased-serde", + "fedimint-bitcoind", + "fedimint-core", + "fedimint-ln-common", "fedimint-metrics", - "fedimint-mint-common", "fedimint-server", - "fedimint-tbs", "fedimint-threshold-crypto", "futures", - "itertools 0.13.0", "rand", - "secp256k1-zkp", + "secp256k1 0.27.0", "serde", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "test-log", "tokio", "tracing", ] [[package]] -name = "fedimint-mint-tests" +name = "fedimint-ln-tests" version = "0.5.0-alpha" dependencies = [ "anyhow", + "assert_matches", "bitcoin_hashes 0.12.0", - "bls12_381", - "devimint", "fedimint-client", "fedimint-core", "fedimint-dummy-client", "fedimint-dummy-common", "fedimint-dummy-server", + "fedimint-ln-client", + "fedimint-ln-common", + "fedimint-ln-server", "fedimint-logging", - "fedimint-mint-client", - "fedimint-mint-common", - "fedimint-mint-server", - "fedimint-tbs", "fedimint-testing", "fedimint-threshold-crypto", - "ff", "futures", + "lightning-invoice", "rand", - "serde", - "strum", + "secp256k1 0.27.0", + "serde_json", + "strum 0.26.3", "tokio", "tracing", ] [[package]] -name = "fedimint-portalloc" +name = "fedimint-lnv2-client" version = "0.5.0-alpha" dependencies = [ "anyhow", - "dirs", + "aquamarine", + "async-stream", + "async-trait", + "bitcoin 0.30.2", + "clap", + "erased-serde", + "fedimint-api-client", + "fedimint-client", "fedimint-core", - "fs2", + "fedimint-lnv2-common", + "fedimint-tpe", + "futures", + "itertools 0.13.0", + "lightning-invoice", "rand", + "reqwest 0.12.5", + "secp256k1 0.27.0", "serde", "serde_json", + "thiserror", "tracing", ] [[package]] -name = "fedimint-recoverytool" +name = "fedimint-lnv2-common" version = "0.5.0-alpha" dependencies = [ "anyhow", "bitcoin 0.30.2", - "clap", - "fedimint-aead", - "fedimint-build", + "bitcoin_hashes 0.12.0", + "fedimint-client", "fedimint-core", - "fedimint-logging", - "fedimint-rocksdb", - "fedimint-server", - "fedimint-wallet-server", - "futures", - "hex", - "miniscript", - "rand", + "fedimint-ln-common", + "fedimint-tpe", + "group", "secp256k1 0.27.0", "serde", "serde_json", - "tokio", - "tracing", - "tracing-subscriber", + "thiserror", ] [[package]] -name = "fedimint-rocksdb" +name = "fedimint-lnv2-server" version = "0.5.0-alpha" dependencies = [ "anyhow", "async-trait", + "bls12_381", + "erased-serde", + "fedimint-bitcoind", "fedimint-core", + "fedimint-lnv2-common", + "fedimint-server", + "fedimint-tpe", "futures", - "rocksdb", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", + "group", + "rand", + "serde", + "strum 0.26.3", + "strum_macros 0.26.4", ] [[package]] -name = "fedimint-server" +name = "fedimint-lnv2-tests" version = "0.5.0-alpha" dependencies = [ - "aleph-bft-types 0.13.0", "anyhow", - "async-channel", "async-trait", - "base64 0.22.1", - "bincode", - "bitcoin 0.30.2", - "bitcoin_hashes 0.12.0", - "bls12_381", - "bytes", - "fedimint-aead", - "fedimint-aleph-bft", - "fedimint-api-client", - "fedimint-build", + "clap", + "devimint", + "fedimint-client", "fedimint-core", + "fedimint-dummy-client", "fedimint-dummy-common", "fedimint-dummy-server", - "fedimint-logging", - "fedimint-metrics", - "fedimint-portalloc", - "fedimint-tbs", - "fedimint-testing-core", - "fedimint-threshold-crypto", - "futures", - "hex", - "hyper 1.4.1", + "fedimint-ln-client", + "fedimint-ln-common", + "fedimint-ln-server", + "fedimint-lnv2-client", + "fedimint-lnv2-common", + "fedimint-lnv2-server", + "fedimint-testing", "itertools 0.13.0", - "jsonrpsee", - "parity-scale-codec", - "pin-project", - "rand", - "rand_chacha", - "rcgen", - "serde", + "lightning-invoice", + "semver", "serde_json", - "sha3", - "strum", - "strum_macros", - "subtle", - "tar", - "tempfile", - "test-log", - "thiserror", + "substring", "tokio", - "tokio-rustls 0.24.1", - "tokio-stream", - "tokio-util", - "tower", "tracing", - "tracing-subscriber", - "url", -] - -[[package]] -name = "fedimint-tbs" -version = "0.5.0-alpha" -dependencies = [ - "bls12_381", - "criterion", - "fedimint-core", - "group", - "hex", - "rand", - "rand_chacha", - "serde", - "sha3", ] [[package]] -name = "fedimint-testing" +name = "fedimint-load-test-tool" version = "0.5.0-alpha" dependencies = [ "anyhow", - "async-stream", - "async-trait", + "base64 0.22.1", "bitcoin 0.30.2", - "bitcoincore-rpc", "clap", + "devimint", "fedimint-api-client", - "fedimint-bitcoind", + "fedimint-build", "fedimint-client", "fedimint-core", + "fedimint-ln-client", "fedimint-ln-common", - "fedimint-ln-gateway", "fedimint-logging", - "fedimint-portalloc", + "fedimint-mint-client", "fedimint-rocksdb", - "fedimint-server", - "fedimint-testing-core", - "fedimint-tonic-lnd", - "fs-lock", + "fedimint-wallet-client", "futures", + "jsonrpsee-core", + "jsonrpsee-types", + "jsonrpsee-ws-client", "lightning-invoice", "rand", - "secp256k1-zkp", "serde", - "tempfile", + "serde_json", "tokio", - "tokio-rustls 0.24.1", - "tokio-stream", "tracing", "url", ] [[package]] -name = "fedimint-testing-core" +name = "fedimint-logging" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "console-subscriber", + "opentelemetry 0.24.0", + "opentelemetry-jaeger", + "tracing-opentelemetry", + "tracing-subscriber", +] + +[[package]] +name = "fedimint-meta-client" version = "0.5.0-alpha" dependencies = [ "anyhow", - "async-stream", "async-trait", - "bitcoin 0.30.2", + "clap", + "erased-serde", + "fedimint-api-client", "fedimint-client", "fedimint-core", - "fedimint-logging", - "fedimint-rocksdb", + "fedimint-meta-common", "futures", - "lightning-invoice", - "rand", - "secp256k1-zkp", "serde", - "tempfile", - "tokio", - "tokio-rustls 0.24.1", - "tokio-stream", + "serde_json", + "strum 0.26.3", + "strum_macros 0.26.4", + "thiserror", "tracing", - "url", ] [[package]] -name = "fedimint-threshold-crypto" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5f0913eb5fb65f83e6b503794f2eba124b542b9bdbb5cf941bc12bc7b0ea67" +name = "fedimint-meta-common" +version = "0.5.0-alpha" dependencies = [ - "bls12_381", - "byteorder", - "ff", - "group", - "hex_fmt", - "log", - "pairing", - "rand", - "rand_chacha", + "anyhow", + "fedimint-core", + "hex", "serde", - "subtle", + "serde_json", "thiserror", - "tiny-keccak", - "zeroize", -] - -[[package]] -name = "fedimint-tonic-lnd" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df03ca33b5116de3051c1e233fe341e23b04c4913c7b16042497924559bc2a2e" -dependencies = [ - "hex", - "http-body 0.4.6", - "hyper 0.14.28", - "hyper-rustls 0.24.2", - "prost 0.12.6", - "rustls 0.21.11", - "rustls-pemfile 1.0.4", - "tokio", - "tokio-stream", - "tonic 0.10.2", - "tonic-build 0.10.2", - "tower", ] [[package]] -name = "fedimint-tpe" +name = "fedimint-meta-server" version = "0.5.0-alpha" dependencies = [ - "bitcoin_hashes 0.12.0", - "bls12_381", + "anyhow", + "async-trait", + "erased-serde", "fedimint-core", - "group", + "fedimint-logging", + "fedimint-meta-common", + "futures", "rand", - "rand_chacha", "serde", - "serde-big-array", + "strum 0.26.3", + "strum_macros 0.26.4", + "tracing", ] [[package]] -name = "fedimint-unknown-common" +name = "fedimint-meta-tests" version = "0.5.0-alpha" dependencies = [ "anyhow", + "devimint", "fedimint-core", - "serde", - "thiserror", + "semver", + "serde_json", + "tokio", + "tracing", ] [[package]] -name = "fedimint-unknown-server" +name = "fedimint-metrics" version = "0.5.0-alpha" dependencies = [ "anyhow", - "async-trait", - "erased-serde", + "axum 0.7.5", "fedimint-core", - "fedimint-unknown-common", - "strum", - "strum_macros", + "prometheus", + "tokio", + "tracing", ] [[package]] -name = "fedimint-wallet-client" +name = "fedimint-mint-client" version = "0.5.0-alpha" dependencies = [ "anyhow", "aquamarine", "async-stream", "async-trait", - "bitcoin 0.30.2", + "base64 0.22.1", + "base64-url", + "bincode", + "bitcoin_hashes 0.12.0", + "bls12_381", "clap", + "criterion", "erased-serde", "fedimint-api-client", - "fedimint-bitcoind", "fedimint-client", "fedimint-core", + "fedimint-derive-secret", "fedimint-logging", - "fedimint-wallet-common", + "fedimint-mint-common", + "fedimint-tbs", + "fedimint-threshold-crypto", "futures", - "rand", - "secp256k1 0.27.0", + "hex", + "itertools 0.13.0", + "secp256k1-zkp", "serde", + "serde-big-array", "serde_json", - "strum", - "strum_macros", + "serdect", + "strum 0.26.3", + "strum_macros 0.26.4", + "test-log", + "thiserror", "tokio", "tracing", - "tracing-subscriber", ] [[package]] -name = "fedimint-wallet-common" +name = "fedimint-mint-common" version = "0.5.0-alpha" dependencies = [ "anyhow", - "bitcoin 0.30.2", + "bincode", + "bitcoin_hashes 0.12.0", "fedimint-core", - "hex", - "impl-tools", - "miniscript", - "secp256k1 0.27.0", + "fedimint-tbs", + "secp256k1-zkp", "serde", - "test-log", "thiserror", "tracing", ] [[package]] -name = "fedimint-wallet-server" +name = "fedimint-mint-server" version = "0.5.0-alpha" dependencies = [ "anyhow", + "assert_matches", "async-trait", - "bitcoin 0.30.2", "erased-serde", - "fedimint-bitcoind", "fedimint-core", "fedimint-logging", "fedimint-metrics", + "fedimint-mint-common", "fedimint-server", - "fedimint-wallet-common", + "fedimint-tbs", + "fedimint-threshold-crypto", "futures", - "hex", - "miniscript", + "itertools 0.13.0", "rand", - "secp256k1 0.27.0", + "secp256k1-zkp", "serde", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", + "test-log", "tokio", "tracing", ] [[package]] -name = "fedimint-wallet-tests" +name = "fedimint-mint-tests" version = "0.5.0-alpha" dependencies = [ "anyhow", - "assert_matches", - "bitcoin 0.30.2", - "bitcoincore-rpc", + "bitcoin_hashes 0.12.0", + "bls12_381", "devimint", - "fedimint-bitcoind", "fedimint-client", "fedimint-core", "fedimint-dummy-client", "fedimint-dummy-common", "fedimint-dummy-server", "fedimint-logging", + "fedimint-mint-client", + "fedimint-mint-common", + "fedimint-mint-server", + "fedimint-tbs", "fedimint-testing", - "fedimint-wallet-client", - "fedimint-wallet-common", - "fedimint-wallet-server", + "fedimint-threshold-crypto", + "ff", "futures", "rand", - "strum", + "serde", + "strum 0.26.3", "tokio", "tracing", ] [[package]] -name = "fedimint-wasm-tests" +name = "fedimint-portalloc" version = "0.5.0-alpha" dependencies = [ "anyhow", - "fedimint-api-client", - "fedimint-client", + "dirs", "fedimint-core", - "fedimint-ln-client", - "fedimint-ln-common", - "fedimint-mint-client", - "fedimint-mint-common", - "fedimint-wallet-client", - "futures", - "gloo-net", - "js-sys", + "fs2", "rand", - "ring", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", -] + "serde", + "serde_json", + "tracing", +] [[package]] -name = "fedimintd" +name = "fedimint-recoverytool" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "bitcoin 0.30.2", + "clap", + "fedimint-aead", + "fedimint-build", + "fedimint-core", + "fedimint-logging", + "fedimint-rocksdb", + "fedimint-server", + "fedimint-wallet-server", + "futures", + "hex", + "miniscript", + "rand", + "secp256k1 0.27.0", + "serde", + "serde_json", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "fedimint-rocksdb" version = "0.5.0-alpha" dependencies = [ "anyhow", "async-trait", - "axum 0.7.5", + "fedimint-core", + "futures", + "rocksdb", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "fedimint-server" +version = "0.5.0-alpha" +dependencies = [ + "aleph-bft-types 0.13.0", + "anyhow", + "async-channel", + "async-trait", + "base64 0.22.1", "bincode", "bitcoin 0.30.2", + "bitcoin_hashes 0.12.0", + "bls12_381", "bytes", - "clap", - "console-subscriber", "fedimint-aead", - "fedimint-bitcoind", + "fedimint-aleph-bft", + "fedimint-api-client", "fedimint-build", "fedimint-core", - "fedimint-ln-common", - "fedimint-ln-server", - "fedimint-lnv2-common", - "fedimint-lnv2-server", + "fedimint-dummy-common", + "fedimint-dummy-server", "fedimint-logging", - "fedimint-meta-server", "fedimint-metrics", - "fedimint-mint-server", - "fedimint-rocksdb", - "fedimint-server", + "fedimint-portalloc", "fedimint-tbs", + "fedimint-testing-core", "fedimint-threshold-crypto", - "fedimint-unknown-common", - "fedimint-unknown-server", - "fedimint-wallet-server", "futures", - "http 1.1.0", - "http-body 1.0.1", + "hex", "hyper 1.4.1", "itertools 0.13.0", "jsonrpsee", + "parity-scale-codec", + "pin-project", "rand", + "rand_chacha", "rcgen", - "ring", "serde", "serde_json", "sha3", + "strum 0.26.3", + "strum_macros 0.26.4", + "subtle", + "tar", + "tempfile", + "test-log", "thiserror", "tokio", "tokio-rustls 0.24.1", + "tokio-stream", "tokio-util", "tower", "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "fedimint-tbs" +version = "0.5.0-alpha" +dependencies = [ + "bls12_381", + "criterion", + "fedimint-core", + "group", + "hex", + "rand", + "rand_chacha", + "serde", + "sha3", +] + +[[package]] +name = "fedimint-testing" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "async-stream", + "async-trait", + "bitcoin 0.30.2", + "bitcoincore-rpc", + "clap", + "fedimint-api-client", + "fedimint-bitcoind", + "fedimint-client", + "fedimint-core", + "fedimint-ln-common", + "fedimint-ln-gateway", + "fedimint-logging", + "fedimint-portalloc", + "fedimint-rocksdb", + "fedimint-server", + "fedimint-testing-core", + "fedimint-tonic-lnd", + "fs-lock", + "futures", + "lightning-invoice", + "rand", + "secp256k1-zkp", + "serde", + "tempfile", + "tokio", + "tokio-rustls 0.24.1", + "tokio-stream", + "tracing", + "url", +] + +[[package]] +name = "fedimint-testing-core" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "async-stream", + "async-trait", + "bitcoin 0.30.2", + "fedimint-client", + "fedimint-core", + "fedimint-logging", + "fedimint-rocksdb", + "futures", + "lightning-invoice", + "rand", + "secp256k1-zkp", + "serde", + "tempfile", + "tokio", + "tokio-rustls 0.24.1", + "tokio-stream", + "tracing", "url", ] [[package]] -name = "ff" +name = "fedimint-threshold-crypto" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5f0913eb5fb65f83e6b503794f2eba124b542b9bdbb5cf941bc12bc7b0ea67" +dependencies = [ + "bls12_381", + "byteorder", + "ff", + "group", + "hex_fmt", + "log", + "pairing", + "rand", + "rand_chacha", + "serde", + "subtle", + "thiserror", + "tiny-keccak", + "zeroize", +] + +[[package]] +name = "fedimint-tonic-lnd" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df03ca33b5116de3051c1e233fe341e23b04c4913c7b16042497924559bc2a2e" +dependencies = [ + "hex", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-rustls 0.24.2", + "prost 0.12.6", + "rustls 0.21.11", + "rustls-pemfile 1.0.4", + "tokio", + "tokio-stream", + "tonic 0.10.2", + "tonic-build 0.10.2", + "tower", +] + +[[package]] +name = "fedimint-tpe" +version = "0.5.0-alpha" +dependencies = [ + "bitcoin_hashes 0.12.0", + "bls12_381", + "fedimint-core", + "group", + "rand", + "rand_chacha", + "serde", + "serde-big-array", +] + +[[package]] +name = "fedimint-unknown-common" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "fedimint-core", + "serde", + "thiserror", +] + +[[package]] +name = "fedimint-unknown-server" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "async-trait", + "erased-serde", + "fedimint-core", + "fedimint-unknown-common", + "strum 0.26.3", + "strum_macros 0.26.4", +] + +[[package]] +name = "fedimint-wallet-client" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "aquamarine", + "async-stream", + "async-trait", + "bitcoin 0.30.2", + "clap", + "erased-serde", + "fedimint-api-client", + "fedimint-bitcoind", + "fedimint-client", + "fedimint-core", + "fedimint-logging", + "fedimint-wallet-common", + "futures", + "rand", + "secp256k1 0.27.0", + "serde", + "serde_json", + "strum 0.26.3", + "strum_macros 0.26.4", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "fedimint-wallet-common" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "bitcoin 0.30.2", + "fedimint-core", + "hex", + "impl-tools", + "miniscript", + "secp256k1 0.27.0", + "serde", + "test-log", + "thiserror", + "tracing", +] + +[[package]] +name = "fedimint-wallet-server" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "async-trait", + "bitcoin 0.30.2", + "erased-serde", + "fedimint-bitcoind", + "fedimint-core", + "fedimint-logging", + "fedimint-metrics", + "fedimint-server", + "fedimint-wallet-common", + "futures", + "hex", + "miniscript", + "rand", + "secp256k1 0.27.0", + "serde", + "strum 0.26.3", + "strum_macros 0.26.4", + "tokio", + "tracing", +] + +[[package]] +name = "fedimint-wallet-tests" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "assert_matches", + "bitcoin 0.30.2", + "bitcoincore-rpc", + "devimint", + "fedimint-bitcoind", + "fedimint-client", + "fedimint-core", + "fedimint-dummy-client", + "fedimint-dummy-common", + "fedimint-dummy-server", + "fedimint-logging", + "fedimint-testing", + "fedimint-wallet-client", + "fedimint-wallet-common", + "fedimint-wallet-server", + "futures", + "rand", + "strum 0.26.3", + "tokio", + "tracing", +] + +[[package]] +name = "fedimint-wasm-tests" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "fedimint-api-client", + "fedimint-client", + "fedimint-core", + "fedimint-ln-client", + "fedimint-ln-common", + "fedimint-mint-client", + "fedimint-mint-common", + "fedimint-wallet-client", + "futures", + "gloo-net", + "js-sys", + "rand", + "ring 0.17.8", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", +] + +[[package]] +name = "fedimintd" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "async-trait", + "axum 0.7.5", + "bincode", + "bitcoin 0.30.2", + "bytes", + "clap", + "console-subscriber", + "fedimint-aead", + "fedimint-bitcoind", + "fedimint-build", + "fedimint-core", + "fedimint-ln-common", + "fedimint-ln-server", + "fedimint-lnv2-common", + "fedimint-lnv2-server", + "fedimint-logging", + "fedimint-meta-server", + "fedimint-metrics", + "fedimint-mint-server", + "fedimint-rocksdb", + "fedimint-server", + "fedimint-tbs", + "fedimint-threshold-crypto", + "fedimint-unknown-common", + "fedimint-unknown-server", + "fedimint-wallet-server", + "futures", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "itertools 0.13.0", + "jsonrpsee", + "rand", + "rcgen", + "ring 0.17.8", + "serde", + "serde_json", + "sha3", + "thiserror", + "tokio", + "tokio-rustls 0.24.1", + "tokio-util", + "tower", + "tracing", + "url", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "figment" +version = "0.10.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" +dependencies = [ + "atomic 0.6.0", + "serde", + "toml", + "uncased", + "version_check", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.52.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fluid-let" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "749cff877dc1af878a0b31a41dd221a753634401ea0ef2f87b62d3171522485a" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-lock" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef0f3b20f39ca3e3d4e6ce75b576ac7658272d2af8646509c4ee84f494f69ab" +dependencies = [ + "fs4", +] + +[[package]] +name = "fs-mistrust" +version = "0.7.11" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +dependencies = [ + "derive_builder_fork_arti", + "dirs", + "libc", + "once_cell", + "pwd-grp", + "serde", + "thiserror", + "walkdir", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fs4" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8c6b3bd49c37d2aa3f3f2220233b29a7cd23f79d1fe70e5337d25fb390793de" +dependencies = [ + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "fslock" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls 0.23.7", + "rustls-pki-types", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers 0.2.6", + "send_wrapper", +] + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gateway-tests" +version = "0.5.0-alpha" +dependencies = [ + "anyhow", + "clap", + "devimint", + "fedimint-core", + "fedimint-ln-gateway", + "fedimint-testing", + "semver", + "serde_json", + "tokio", + "tracing", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "glob-match" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985c9503b412198aa4197559e9a318524ebc4519c229bfa05a535828c950b9d" + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 1.1.0", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.5", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 1.1.0", + "indexmap 2.2.5", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.3", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-conservative" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" + +[[package]] +name = "hex_fmt" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" + +[[package]] +name = "hex_lit" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "honggfuzz" +version = "0.5.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "848e9c511092e0daa0a35a63e8e6e475a3e8f870741448b9f6028d69b142f18e" +dependencies = [ + "lazy_static", + "memmap2 0.5.10", + "rustc_version", +] + +[[package]] +name = "hostname-validator" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.4", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.28", + "rustls 0.21.11", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls 0.23.7", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", + "webpki-roots 0.26.3", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.28", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +dependencies = [ + "hyper 1.4.1", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "imbl" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc3be8d8cd36f33a46b1849f31f837c44d9fa87223baee3b4bd96b8f11df81eb" +dependencies = [ + "bitmaps", + "imbl-sized-chunks", + "rand_core", + "rand_xoshiro", + "version_check", +] + +[[package]] +name = "imbl-sized-chunks" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144006fb58ed787dcae3f54575ff4349755b00ccc99f4b4873860b654be1ed63" +dependencies = [ + "bitmaps", +] + +[[package]] +name = "impl-tools" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82c305b1081f1a99fda262883c788e50ab57d36c00830bdd7e0a82894ad965c" +dependencies = [ + "autocfg", + "impl-tools-lib", + "proc-macro-error", + "syn 2.0.72", +] + +[[package]] +name = "impl-tools-lib" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85d3946d886eaab0702fa0c6585adcced581513223fa9df7ccfabbd9fa331a88" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "include_dir" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "inventory" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +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 = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ - "bitvec", - "rand_core", - "subtle", + "either", ] [[package]] -name = "filetime" -version = "0.2.23" +name = "itoa" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" dependencies = [ - "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.52.0", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "js-sys" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] [[package]] -name = "flate2" -version = "1.0.28" +name = "jsonrpc" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "8128f36b47411cd3f044be8c1f5cc0c9e24d1d1bfdc45f0a57897b32513053f2" dependencies = [ - "crc32fast", - "miniz_oxide", + "base64 0.13.1", + "serde", + "serde_json", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "jsonrpsee" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "0a1d83ae9ed70d8e3440db663e343a82f93913104744cd543bbcdd1dbc0e35d3" +dependencies = [ + "jsonrpsee-core", + "jsonrpsee-server", + "jsonrpsee-types", + "tokio", +] [[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "jsonrpsee-client-transport" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "5be764c8b96cdcd2974655560a1c6542a366440d47c88114894cc20c24317815" dependencies = [ - "percent-encoding", + "base64 0.22.1", + "futures-channel", + "futures-util", + "gloo-net", + "http 1.1.0", + "jsonrpsee-core", + "pin-project", + "rustls 0.23.7", + "rustls-pki-types", + "soketto", + "thiserror", + "tokio", + "tokio-rustls 0.26.0", + "tokio-util", + "tracing", + "url", ] [[package]] -name = "fs-lock" -version = "0.1.4" +name = "jsonrpsee-core" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ef0f3b20f39ca3e3d4e6ce75b576ac7658272d2af8646509c4ee84f494f69ab" +checksum = "83b772fb8aa2b511eeed75f7e19d8e5fa57be7e8202249470bf26210727399c7" dependencies = [ - "fs4", + "async-trait", + "bytes", + "futures-timer", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "jsonrpsee-types", + "parking_lot", + "pin-project", + "rand", + "rustc-hash 2.0.0", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "wasm-bindgen-futures", ] [[package]] -name = "fs2" -version = "0.4.3" +name = "jsonrpsee-server" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +checksum = "85bf179199ad809157ceaab653f71cdb67f55d9e0093a6907c5765414a6b3bbb" dependencies = [ - "libc", - "winapi", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "route-recognizer", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", ] [[package]] -name = "fs4" -version = "0.9.1" +name = "jsonrpsee-types" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c6b3bd49c37d2aa3f3f2220233b29a7cd23f79d1fe70e5337d25fb390793de" +checksum = "98deeee954567f75632fa40666ac93a66d4f9f4ed4ca15bd6b7ed0720b53e761" dependencies = [ - "rustix", - "windows-sys 0.52.0", + "http 1.1.0", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "funty" -version = "2.0.0" +name = "jsonrpsee-wasm-client" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "4c8a01468705cf6d326b8ba9c035e71abf5cc5e10948ba46e8af151386878398" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", +] [[package]] -name = "futures" -version = "0.3.30" +name = "jsonrpsee-ws-client" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "385cf0a6103a9f64987cdf0f7c9d0b08e1d7183dd952820beffb3676e7df7787" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "http 1.1.0", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", + "url", ] [[package]] -name = "futures-channel" -version = "0.3.30" +name = "keccak" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ - "futures-core", - "futures-sink", + "cpufeatures", ] [[package]] -name = "futures-core" -version = "0.3.30" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] [[package]] -name = "futures-executor" -version = "0.3.30" +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "ldk-node" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a5400043598f1da534abf81bb937739a680663d57a451bf8363d6113211424" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "bdk", + "bip39", + "bitcoin 0.30.2", + "chrono", + "esplora-client", + "libc", + "lightning", + "lightning-background-processor", + "lightning-invoice", + "lightning-liquidity", + "lightning-net-tokio", + "lightning-persister", + "lightning-rapid-gossip-sync", + "lightning-transaction-sync", + "prost 0.11.9", + "rand", + "reqwest 0.11.27", + "rusqlite", + "tokio", + "vss-client", + "winapi", ] [[package]] -name = "futures-io" -version = "0.3.30" +name = "libc" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] -name = "futures-macro" -version = "0.3.30" +name = "libloading" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "cfg-if", + "windows-targets 0.48.5", ] [[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" +name = "libm" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] -name = "futures-timer" -version = "3.0.3" +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ - "gloo-timers 0.2.6", - "send_wrapper", + "bitflags 2.4.2", + "libc", + "redox_syscall", ] [[package]] -name = "futures-util" -version = "0.3.30" +name = "librocksdb-sys" +version = "0.16.0+8.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "ce3d60bc059831dc1c83903fb45c103f75db65c5a7bf22272764d9cc683e348c" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", + "zstd-sys", ] [[package]] -name = "gateway-tests" -version = "0.5.0-alpha" +name = "libsqlite3-sys" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" dependencies = [ - "anyhow", - "clap", - "devimint", - "fedimint-core", - "fedimint-ln-gateway", - "fedimint-testing", - "semver", - "serde_json", - "tokio", - "tracing", + "cc", + "pkg-config", + "vcpkg", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "libz-sys" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" dependencies = [ - "typenum", - "version_check", + "cc", + "pkg-config", + "vcpkg", ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "lightning" +version = "0.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "5fd92d4aa159374be430c7590e169b4a6c0fb79018f5bc4ea1bffde536384db3" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", + "bitcoin 0.30.2", + "core2", + "hashbrown 0.13.2", + "hex-conservative", + "libm", + "possiblyrandom", ] [[package]] -name = "gimli" -version = "0.29.0" +name = "lightning-background-processor" +version = "0.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "fb1c2c64050e37cee7c3b6b022106523784055ac3ee572d360780a1d6fe8062c" +dependencies = [ + "bitcoin 0.30.2", + "lightning", + "lightning-rapid-gossip-sync", +] [[package]] -name = "glob" -version = "0.3.1" +name = "lightning-invoice" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "26d07d01cf197bf2184b929b7dc94aa70d935aac6df896c256a3a9475b7e9d40" +dependencies = [ + "bech32 0.9.1", + "bitcoin 0.30.2", + "lightning", + "secp256k1 0.27.0", + "serde", +] [[package]] -name = "gloo-net" -version = "0.6.0" +name = "lightning-liquidity" +version = "0.1.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +checksum = "3fa6284740f64672f42145de7b0a242beea3821dae1f0eac7949a8f48799c828" dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils", - "http 1.1.0", - "js-sys", - "pin-project", + "bitcoin 0.30.2", + "chrono", + "lightning", + "lightning-invoice", "serde", "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", ] [[package]] -name = "gloo-timers" -version = "0.2.6" +name = "lightning-net-tokio" +version = "0.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "f9e6a4d49c50a1344916d080dc8c012ce3a778cdd45de8def75350b2b40fe018" dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", + "bitcoin 0.30.2", + "lightning", + "tokio", ] [[package]] -name = "gloo-timers" -version = "0.3.0" +name = "lightning-persister" +version = "0.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +checksum = "8a8dd33971815fa074b05678e09a6d4b15c78225ea34d66ed4f17c35a53467a9" dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", + "bitcoin 0.30.2", + "lightning", + "windows-sys 0.48.0", ] [[package]] -name = "gloo-utils" -version = "0.2.0" +name = "lightning-rapid-gossip-sync" +version = "0.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +checksum = "9d861b0f0cd5f8fe8c63760023c4fd4fd32c384881b41780b62ced2a8a619f91" dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", + "bitcoin 0.30.2", + "lightning", ] [[package]] -name = "group" -version = "0.13.0" +name = "lightning-transaction-sync" +version = "0.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "04c1e88eece28f19b5834fb5aefceabc5d143cfda2dfa9a32f73e66f4d0c84ed" dependencies = [ - "ff", - "rand_core", - "subtle", + "bdk-macros", + "bitcoin 0.30.2", + "esplora-client", + "futures", + "lightning", ] [[package]] -name = "h2" -version = "0.3.26" +name = "linux-raw-sys" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.2.5", - "slab", - "tokio", - "tokio-util", - "tracing", -] +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] -name = "h2" -version = "0.4.4" +name = "lnurl-rs" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +checksum = "86f2347f6764fedbb74482d88f472dc3e2c7613304bfea31ce1b7ee8e1ebbf8c" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 1.1.0", - "indexmap 2.2.5", - "slab", - "tokio", - "tokio-util", - "tracing", + "aes", + "anyhow", + "base64 0.22.1", + "bech32 0.11.0", + "bitcoin 0.30.2", + "cbc", + "email_address", + "reqwest 0.12.5", + "serde", + "serde_json", + "url", ] [[package]] -name = "half" -version = "2.4.1" +name = "lock_api" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ - "cfg-if", - "crunchy", + "autocfg", + "scopeguard", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "log" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] -name = "hashbrown" -version = "0.13.2" +name = "lru" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +dependencies = [ + "hashbrown 0.14.3", +] [[package]] -name = "hashbrown" -version = "0.14.3" +name = "lz4-sys" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" dependencies = [ - "ahash 0.8.11", - "allocator-api2", + "cc", + "libc", ] [[package]] -name = "hashlink" -version = "0.8.4" +name = "macro_rules_attribute" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13" dependencies = [ - "hashbrown 0.14.3", + "macro_rules_attribute-proc_macro", + "paste", ] [[package]] -name = "hdrhistogram" -version = "7.5.4" +name = "macro_rules_attribute-proc_macro" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "base64 0.21.7", - "byteorder", - "flate2", - "nom", - "num-traits", + "regex-automata 0.1.10", ] [[package]] -name = "heck" -version = "0.4.1" +name = "matchit" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] -name = "heck" -version = "0.5.0" +name = "memchr" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] -name = "hermit-abi" -version = "0.3.9" +name = "memmap2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] [[package]] -name = "hex" -version = "0.4.3" +name = "memmap2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ - "serde", + "libc", ] [[package]] -name = "hex-conservative" -version = "0.1.1" +name = "merlin" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core", + "zeroize", +] [[package]] -name = "hex_fmt" -version = "0.3.0" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "hex_lit" -version = "0.1.1" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "home" -version = "0.5.9" +name = "miniscript" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "1eb102b66b2127a872dbcc73095b7b47aeb9d92f7b03c2b2298253ffc82c7594" dependencies = [ - "windows-sys 0.52.0", + "bitcoin 0.30.2", + "bitcoin-private", + "serde", ] [[package]] -name = "honggfuzz" -version = "0.5.55" +name = "miniz_oxide" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848e9c511092e0daa0a35a63e8e6e475a3e8f870741448b9f6028d69b142f18e" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ - "lazy_static", - "memmap2", - "rustc_version", + "adler", ] [[package]] -name = "http" -version = "0.2.12" +name = "mio" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ - "bytes", - "fnv", - "itoa", + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", ] [[package]] -name = "http" -version = "1.1.0" +name = "multimap" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bytes", - "fnv", - "itoa", + "bitflags 2.4.2", + "cfg-if", + "cfg_aliases", + "libc", ] [[package]] -name = "http-body" -version = "0.4.6" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", + "memchr", + "minimal-lexical", ] [[package]] -name = "http-body" -version = "1.0.1" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "bytes", - "http 1.1.0", + "overload", + "winapi", ] [[package]] -name = "http-body-util" -version = "0.1.1" +name = "num-bigint" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "bytes", - "futures-core", - "http 1.1.0", - "http-body 1.0.1", - "pin-project-lite", + "num-integer", + "num-traits", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "num-bigint-dig" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "num-conv" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "humantime" -version = "2.1.0" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] [[package]] -name = "hyper" -version = "0.14.28" +name = "num-iter" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", + "autocfg", + "num-integer", + "num-traits", ] [[package]] -name = "hyper" -version = "1.4.1" +name = "num-traits" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.4", - "http 1.1.0", - "http-body 1.0.1", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", + "autocfg", + "libm", ] [[package]] -name = "hyper-rustls" -version = "0.24.2" +name = "num_cpus" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.28", - "rustls 0.21.11", - "tokio", - "tokio-rustls 0.24.1", + "hermit-abi", + "libc", ] [[package]] -name = "hyper-rustls" -version = "0.27.2" +name = "num_enum" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ - "futures-util", - "http 1.1.0", - "hyper 1.4.1", - "hyper-util", - "rustls 0.23.7", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.0", - "tower-service", - "webpki-roots 0.26.3", + "num_enum_derive", ] [[package]] -name = "hyper-timeout" -version = "0.4.1" +name = "num_enum_derive" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "hyper 0.14.28", - "pin-project-lite", - "tokio", - "tokio-io-timeout", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "hyper-timeout" -version = "0.5.1" +name = "object" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" dependencies = [ - "hyper 1.4.1", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", + "memchr", ] [[package]] -name = "hyper-util" -version = "0.1.6" +name = "once_cell" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "opentelemetry" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "hyper 1.4.1", + "futures-core", + "futures-sink", + "js-sys", + "once_cell", "pin-project-lite", - "socket2", - "tokio", - "tower", - "tower-service", - "tracing", + "thiserror", ] [[package]] -name = "iana-time-zone" -version = "0.1.60" +name = "opentelemetry" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "4c365a63eec4f55b7efeceb724f1336f26a9cf3427b70e59e2cd2a5b947fba96" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", + "futures-core", + "futures-sink", "js-sys", - "wasm-bindgen", - "windows-core", + "once_cell", + "pin-project-lite", + "thiserror", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "opentelemetry-jaeger" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "501b471b67b746d9a07d4c29f8be00f952d1a2eca356922ede0098cbaddff19f" dependencies = [ - "cc", + "async-trait", + "futures-core", + "futures-util", + "opentelemetry 0.23.0", + "opentelemetry-semantic-conventions", + "opentelemetry_sdk", + "thrift", ] [[package]] -name = "idna" -version = "0.5.0" +name = "opentelemetry-semantic-conventions" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] +checksum = "1869fb4bb9b35c5ba8a1e40c9b128a7b4c010d07091e864a29da19e4fe2ca4d7" [[package]] -name = "imbl" -version = "3.0.0" +name = "opentelemetry_sdk" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3be8d8cd36f33a46b1849f31f837c44d9fa87223baee3b4bd96b8f11df81eb" +checksum = "ae312d58eaa90a82d2e627fd86e075cf5230b3f11794e2ed74199ebbe572d4fd" dependencies = [ - "bitmaps", - "imbl-sized-chunks", - "rand_core", - "rand_xoshiro", - "version_check", + "async-trait", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "lazy_static", + "once_cell", + "opentelemetry 0.23.0", + "ordered-float 4.2.0", + "percent-encoding", + "rand", + "thiserror", ] [[package]] -name = "imbl-sized-chunks" -version = "0.1.2" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144006fb58ed787dcae3f54575ff4349755b00ccc99f4b4873860b654be1ed63" -dependencies = [ - "bitmaps", -] +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] -name = "impl-tools" -version = "0.10.0" +name = "ordered-float" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82c305b1081f1a99fda262883c788e50ab57d36c00830bdd7e0a82894ad965c" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" dependencies = [ - "autocfg", - "impl-tools-lib", - "proc-macro-error", - "syn 2.0.72", + "num-traits", ] [[package]] -name = "impl-tools-lib" -version = "0.10.0" +name = "ordered-float" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85d3946d886eaab0702fa0c6585adcced581513223fa9df7ccfabbd9fa331a88" +checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.72", + "num-traits", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" +name = "overload" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", ] [[package]] -name = "include_dir" -version = "0.7.3" +name = "p384" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" dependencies = [ - "include_dir_macros", + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", ] [[package]] -name = "include_dir_macros" -version = "0.7.3" +name = "p521" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" dependencies = [ - "proc-macro2", - "quote", + "base16ct", + "ecdsa", + "elliptic-curve", + "primeorder", + "rand_core", + "sha2", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "pairing" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "group", ] [[package]] -name = "indexmap" -version = "2.2.5" +name = "parity-scale-codec" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "equivalent", - "hashbrown 0.14.3", + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", ] [[package]] -name = "inout" -version = "0.1.3" +name = "parity-scale-codec-derive" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "block-padding", - "generic-array", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "integer-encoding" -version = "3.0.4" +name = "parking" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] -name = "ipnet" -version = "2.9.0" +name = "parking_lot" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] [[package]] -name = "is-terminal" -version = "0.4.12" +name = "parking_lot_core" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ - "hermit-abi", + "cfg-if", "libc", - "windows-sys 0.52.0", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "password-hash" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ - "either", + "base64ct", + "rand_core", + "subtle", ] [[package]] -name = "itertools" -version = "0.11.0" +name = "paste" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] -name = "itertools" -version = "0.12.1" +name = "pem" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" dependencies = [ - "either", + "base64 0.21.7", + "serde", ] [[package]] -name = "itertools" -version = "0.13.0" +name = "pem-rfc7468" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ - "either", + "base64ct", ] [[package]] -name = "itoa" -version = "1.0.10" +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "jobserver" -version = "0.1.31" +name = "petgraph" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ - "libc", + "fixedbitset", + "indexmap 2.2.5", ] [[package]] -name = "js-sys" -version = "0.3.69" +name = "phf" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ - "wasm-bindgen", + "phf_macros", + "phf_shared", ] [[package]] -name = "jsonrpc" -version = "0.14.1" +name = "phf_generator" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8128f36b47411cd3f044be8c1f5cc0c9e24d1d1bfdc45f0a57897b32513053f2" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ - "base64 0.13.1", - "serde", - "serde_json", + "phf_shared", + "rand", ] [[package]] -name = "jsonrpsee" -version = "0.24.2" +name = "phf_macros" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1d83ae9ed70d8e3440db663e343a82f93913104744cd543bbcdd1dbc0e35d3" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "jsonrpsee-core", - "jsonrpsee-server", - "jsonrpsee-types", - "tokio", + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "jsonrpsee-client-transport" -version = "0.24.2" +name = "phf_shared" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be764c8b96cdcd2974655560a1c6542a366440d47c88114894cc20c24317815" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ - "base64 0.22.1", - "futures-channel", - "futures-util", - "gloo-net", - "http 1.1.0", - "jsonrpsee-core", - "pin-project", - "rustls 0.23.7", - "rustls-pki-types", - "soketto", - "thiserror", - "tokio", - "tokio-rustls 0.26.0", - "tokio-util", - "tracing", - "url", + "siphasher", ] [[package]] -name = "jsonrpsee-core" -version = "0.24.2" +name = "pin-project" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b772fb8aa2b511eeed75f7e19d8e5fa57be7e8202249470bf26210727399c7" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ - "async-trait", - "bytes", - "futures-timer", - "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "http-body-util", - "jsonrpsee-types", - "parking_lot", - "pin-project", - "rand", - "rustc-hash 2.0.0", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "wasm-bindgen-futures", + "pin-project-internal", ] [[package]] -name = "jsonrpsee-server" -version = "0.24.2" +name = "pin-project-internal" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf179199ad809157ceaab653f71cdb67f55d9e0093a6907c5765414a6b3bbb" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ - "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "http-body-util", - "hyper 1.4.1", - "hyper-util", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project", - "route-recognizer", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tracing", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "jsonrpsee-types" -version = "0.24.2" +name = "pin-project-lite" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98deeee954567f75632fa40666ac93a66d4f9f4ed4ca15bd6b7ed0720b53e761" -dependencies = [ - "http 1.1.0", - "serde", - "serde_json", - "thiserror", -] +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] -name = "jsonrpsee-wasm-client" -version = "0.24.2" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8a01468705cf6d326b8ba9c035e71abf5cc5e10948ba46e8af151386878398" -dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "jsonrpsee-ws-client" -version = "0.24.2" +name = "pkcs1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385cf0a6103a9f64987cdf0f7c9d0b08e1d7183dd952820beffb3676e7df7787" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "http 1.1.0", - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", - "url", + "der", + "pkcs8", + "spki", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "pkcs8" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "cpufeatures", + "der", + "spki", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "pkg-config" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] -name = "lazycell" -version = "1.3.0" +name = "platforms" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" [[package]] -name = "ldk-node" -version = "0.3.0" +name = "plotters" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a5400043598f1da534abf81bb937739a680663d57a451bf8363d6113211424" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" dependencies = [ - "bdk", - "bip39", - "bitcoin 0.30.2", - "chrono", - "esplora-client", - "libc", - "lightning", - "lightning-background-processor", - "lightning-invoice", - "lightning-liquidity", - "lightning-net-tokio", - "lightning-persister", - "lightning-rapid-gossip-sync", - "lightning-transaction-sync", - "prost 0.11.9", - "rand", - "reqwest 0.11.27", - "rusqlite", - "tokio", - "vss-client", - "winapi", + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", ] [[package]] -name = "libc" -version = "0.2.155" +name = "plotters-backend" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "possiblyrandom" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b122a615d72104fb3d8b26523fdf9232cd8ee06949fb37e4ce3ff964d15dffd" +dependencies = [ + "getrandom", +] [[package]] -name = "libloading" -version = "0.8.3" +name = "postage" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "af3fb618632874fb76937c2361a7f22afd393c982a2165595407edc75b06d3c1" dependencies = [ - "cfg-if", - "windows-targets 0.48.5", + "atomic 0.5.3", + "crossbeam-queue", + "futures", + "parking_lot", + "pin-project", + "static_assertions", + "thiserror", ] [[package]] -name = "libm" -version = "0.2.8" +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "libredox" -version = "0.0.1" +name = "ppv-lite86" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" -dependencies = [ - "bitflags 2.4.2", - "libc", - "redox_syscall", -] +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] -name = "librocksdb-sys" -version = "0.16.0+8.10.0" +name = "prettyplease" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce3d60bc059831dc1c83903fb45c103f75db65c5a7bf22272764d9cc683e348c" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "lz4-sys", - "zstd-sys", + "proc-macro2", + "syn 1.0.109", ] [[package]] -name = "libsqlite3-sys" -version = "0.25.2" +name = "prettyplease" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" dependencies = [ - "cc", - "pkg-config", - "vcpkg", + "proc-macro2", + "syn 2.0.72", ] [[package]] -name = "libz-sys" -version = "1.1.15" +name = "primeorder" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ - "cc", - "pkg-config", - "vcpkg", + "elliptic-curve", ] [[package]] -name = "lightning" -version = "0.0.123" +name = "priority-queue" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd92d4aa159374be430c7590e169b4a6c0fb79018f5bc4ea1bffde536384db3" +checksum = "70c501afe3a2e25c9bd219aa56ec1e04cdb3fcdd763055be268778c13fa82c1f" dependencies = [ - "bitcoin 0.30.2", - "core2", - "hashbrown 0.13.2", - "hex-conservative", - "libm", - "possiblyrandom", + "autocfg", + "equivalent", + "indexmap 2.2.5", ] [[package]] -name = "lightning-background-processor" -version = "0.0.123" +name = "proc-macro-crate" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1c2c64050e37cee7c3b6b022106523784055ac3ee572d360780a1d6fe8062c" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ - "bitcoin 0.30.2", - "lightning", - "lightning-rapid-gossip-sync", + "once_cell", + "toml_edit 0.19.15", ] [[package]] -name = "lightning-invoice" -version = "0.31.0" +name = "proc-macro-crate" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d07d01cf197bf2184b929b7dc94aa70d935aac6df896c256a3a9475b7e9d40" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "bech32 0.9.1", - "bitcoin 0.30.2", - "lightning", - "secp256k1 0.27.0", - "serde", + "toml_edit 0.21.1", ] [[package]] -name = "lightning-liquidity" -version = "0.1.0-alpha.4" +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa6284740f64672f42145de7b0a242beea3821dae1f0eac7949a8f48799c828" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ - "bitcoin 0.30.2", - "chrono", - "lightning", - "lightning-invoice", - "serde", - "serde_json", + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", ] [[package]] -name = "lightning-net-tokio" -version = "0.0.123" +name = "proc-macro-error-attr" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e6a4d49c50a1344916d080dc8c012ce3a778cdd45de8def75350b2b40fe018" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "bitcoin 0.30.2", - "lightning", - "tokio", + "proc-macro2", + "quote", + "version_check", ] [[package]] -name = "lightning-persister" -version = "0.0.123" +name = "proc-macro2" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8dd33971815fa074b05678e09a6d4b15c78225ea34d66ed4f17c35a53467a9" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ - "bitcoin 0.30.2", - "lightning", - "windows-sys 0.48.0", + "unicode-ident", ] [[package]] -name = "lightning-rapid-gossip-sync" -version = "0.0.123" +name = "prometheus" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d861b0f0cd5f8fe8c63760023c4fd4fd32c384881b41780b62ced2a8a619f91" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" dependencies = [ - "bitcoin 0.30.2", - "lightning", + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror", ] [[package]] -name = "lightning-transaction-sync" -version = "0.0.123" +name = "prost" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c1e88eece28f19b5834fb5aefceabc5d143cfda2dfa9a32f73e66f4d0c84ed" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ - "bdk-macros", - "bitcoin 0.30.2", - "esplora-client", - "futures", - "lightning", + "bytes", + "prost-derive 0.11.9", ] [[package]] -name = "linux-raw-sys" -version = "0.4.13" +name = "prost" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive 0.12.6", +] [[package]] -name = "lnurl-rs" -version = "0.6.0" +name = "prost" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f2347f6764fedbb74482d88f472dc3e2c7613304bfea31ce1b7ee8e1ebbf8c" +checksum = "e13db3d3fde688c61e2446b4d843bc27a7e8af269a69440c0308021dc92333cc" dependencies = [ - "aes", - "anyhow", - "base64 0.22.1", - "bech32 0.11.0", - "bitcoin 0.30.2", - "cbc", - "email_address", - "reqwest 0.12.5", - "serde", - "serde_json", - "url", + "bytes", + "prost-derive 0.13.1", ] [[package]] -name = "lock_api" -version = "0.4.11" +name = "prost-build" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ - "autocfg", - "scopeguard", + "bytes", + "heck 0.4.1", + "itertools 0.10.5", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease 0.1.25", + "prost 0.11.9", + "prost-types 0.11.9", + "regex", + "syn 1.0.109", + "tempfile", + "which", ] [[package]] -name = "log" -version = "0.4.21" +name = "prost-build" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +dependencies = [ + "bytes", + "heck 0.4.1", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease 0.2.16", + "prost 0.12.6", + "prost-types 0.12.3", + "regex", + "syn 2.0.72", + "tempfile", + "which", +] [[package]] -name = "lru" -version = "0.12.4" +name = "prost-build" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +checksum = "5bb182580f71dd070f88d01ce3de9f4da5021db7115d2e1c3605a754153b77c1" dependencies = [ - "hashbrown 0.14.3", + "bytes", + "heck 0.5.0", + "itertools 0.13.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease 0.2.16", + "prost 0.13.1", + "prost-types 0.13.1", + "regex", + "syn 2.0.72", + "tempfile", ] [[package]] -name = "lz4-sys" -version = "1.9.4" +name = "prost-derive" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ - "cc", - "libc", + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "macro_rules_attribute" -version = "0.2.0" +name = "prost-derive" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ - "macro_rules_attribute-proc_macro", - "paste", + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "macro_rules_attribute-proc_macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" - -[[package]] -name = "matchers" -version = "0.1.0" +name = "prost-derive" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" dependencies = [ - "regex-automata 0.1.10", + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "matchit" -version = "0.7.3" +name = "prost-types" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] [[package]] -name = "memchr" -version = "2.7.1" +name = "prost-types" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost 0.12.6", +] [[package]] -name = "memmap2" -version = "0.5.10" +name = "prost-types" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "cee5168b05f49d4b0ca581206eb14a7b22fafd963efe729ac48eb03266e25cc2" dependencies = [ - "libc", + "prost 0.13.1", ] [[package]] -name = "mime" -version = "0.3.17" +name = "protobuf" +version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "pwd-grp" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "6955c41fd7e4283bdf6ff3e7218b7e3f8ef24c4236b31d22be050f4cfd5e2a2c" +dependencies = [ + "derive-adhoc", + "libc", + "paste", + "thiserror", +] [[package]] -name = "miniscript" -version = "10.0.0" +name = "quinn" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eb102b66b2127a872dbcc73095b7b47aeb9d92f7b03c2b2298253ffc82c7594" +checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" dependencies = [ - "bitcoin 0.30.2", - "bitcoin-private", - "serde", + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 1.1.0", + "rustls 0.23.7", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "miniz_oxide" -version = "0.7.2" +name = "quinn-proto" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" dependencies = [ - "adler", + "bytes", + "rand", + "ring 0.17.8", + "rustc-hash 1.1.0", + "rustls 0.23.7", + "slab", + "thiserror", + "tinyvec", + "tracing", ] [[package]] -name = "mio" -version = "1.0.1" +name = "quinn-udp" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" dependencies = [ - "hermit-abi", "libc", - "wasi", + "once_cell", + "socket2", + "tracing", "windows-sys 0.52.0", ] [[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "nix" -version = "0.29.0" +name = "quote" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ - "bitflags 2.4.2", - "cfg-if", - "cfg_aliases", - "libc", + "proc-macro2", ] [[package]] -name = "nom" -version = "7.1.3" +name = "radium" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] -name = "nu-ansi-term" -version = "0.46.0" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "overload", - "winapi", + "libc", + "rand_chacha", + "rand_core", ] [[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-traits" -version = "0.2.18" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "autocfg", + "ppv-lite86", + "rand_core", ] [[package]] -name = "num_cpus" -version = "1.16.0" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "hermit-abi", - "libc", + "getrandom", ] [[package]] -name = "object" -version = "0.36.0" +name = "rand_xoshiro" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" dependencies = [ - "memchr", + "rand_core", ] [[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - -[[package]] -name = "opentelemetry" -version = "0.23.0" +name = "rayon" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "futures-core", - "futures-sink", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror", + "either", + "rayon-core", ] [[package]] -name = "opentelemetry" -version = "0.24.0" +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c365a63eec4f55b7efeceb724f1336f26a9cf3427b70e59e2cd2a5b947fba96" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "futures-core", - "futures-sink", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "opentelemetry-jaeger" -version = "0.22.0" +name = "rcgen" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501b471b67b746d9a07d4c29f8be00f952d1a2eca356922ede0098cbaddff19f" +checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" dependencies = [ - "async-trait", - "futures-core", - "futures-util", - "opentelemetry 0.23.0", - "opentelemetry-semantic-conventions", - "opentelemetry_sdk", - "thrift", + "pem", + "ring 0.17.8", + "rustls-pki-types", + "time", + "yasna", ] [[package]] -name = "opentelemetry-semantic-conventions" -version = "0.15.0" +name = "redox_syscall" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1869fb4bb9b35c5ba8a1e40c9b128a7b4c010d07091e864a29da19e4fe2ca4d7" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] [[package]] -name = "opentelemetry_sdk" -version = "0.23.0" +name = "redox_users" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae312d58eaa90a82d2e627fd86e075cf5230b3f11794e2ed74199ebbe572d4fd" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "async-trait", - "futures-channel", - "futures-executor", - "futures-util", - "glob", - "lazy_static", - "once_cell", - "opentelemetry 0.23.0", - "ordered-float 4.2.0", - "percent-encoding", - "rand", + "getrandom", + "libredox", "thiserror", ] [[package]] -name = "option-ext" -version = "0.2.0" +name = "regex" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.2", +] [[package]] -name = "ordered-float" -version = "2.10.1" +name = "regex-automata" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "num-traits", + "regex-syntax 0.6.29", ] [[package]] -name = "ordered-float" -version = "4.2.0" +name = "regex-automata" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ - "num-traits", + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", ] [[package]] -name = "overload" -version = "0.1.1" +name = "regex-syntax" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "pairing" -version = "0.23.0" +name = "regex-syntax" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] -name = "parity-scale-codec" -version = "3.6.12" +name = "reqwest" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.11", + "rustls-pemfile 1.0.4", "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-rustls 0.24.1", + "tokio-socks", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.25.4", + "winreg 0.50.0", ] [[package]] -name = "parity-scale-codec-derive" -version = "3.6.12" +name = "reqwest" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.4", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.2", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.7", + "rustls-pemfile 2.1.1", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tokio-rustls 0.26.0", + "tokio-socks", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.26.3", + "winreg 0.52.0", ] [[package]] -name = "parking" -version = "2.2.0" +name = "retry-error" +version = "0.5.3" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" + +[[package]] +name = "rfc6979" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] [[package]] -name = "parking_lot" -version = "0.12.1" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ - "lock_api", - "parking_lot_core", + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", ] [[package]] -name = "parking_lot_core" -version = "0.9.9" +name = "ring" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ + "cc", "cfg-if", + "getrandom", "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.48.5", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", ] [[package]] -name = "password-hash" -version = "0.5.0" +name = "rocksdb" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +checksum = "6bd13e55d6d7b8cd0ea569161127567cd587676c99f4472f779a0279aa60a7a7" dependencies = [ - "base64ct", - "rand_core", - "subtle", + "libc", + "librocksdb-sys", ] [[package]] -name = "paste" -version = "1.0.14" +name = "route-recognizer" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] -name = "pem" -version = "3.0.3" +name = "rsa" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" dependencies = [ - "base64 0.21.7", - "serde", + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "sha2", + "signature", + "spki", + "subtle", + "zeroize", ] [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "rusqlite" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" +dependencies = [ + "bitflags 1.3.2", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", + "time", +] [[package]] -name = "petgraph" -version = "0.6.4" +name = "rustc-demangle" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap 2.2.5", -] +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] -name = "pin-project" -version = "1.1.5" +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "pin-project-internal", + "semver", ] [[package]] -name = "pin-project-internal" -version = "1.1.5" +name = "rustix" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", ] [[package]] -name = "pin-project-lite" -version = "0.2.13" +name = "rustls" +version = "0.21.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "rustls" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" +dependencies = [ + "log", + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.2", + "subtle", + "zeroize", +] [[package]] -name = "pkg-config" -version = "0.3.30" +name = "rustls-pemfile" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] [[package]] -name = "plotters" -version = "0.3.5" +name = "rustls-pemfile" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +checksum = "f48172685e6ff52a556baa527774f61fcaa884f59daf3375c62a3f1cd2549dab" dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", + "base64 0.21.7", + "rustls-pki-types", ] [[package]] -name = "plotters-backend" -version = "0.3.5" +name = "rustls-pki-types" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] -name = "plotters-svg" -version = "0.3.5" +name = "rustls-webpki" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "plotters-backend", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] -name = "possiblyrandom" -version = "0.2.0" +name = "rustls-webpki" +version = "0.102.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b122a615d72104fb3d8b26523fdf9232cd8ee06949fb37e4ce3ff964d15dffd" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" dependencies = [ - "getrandom", + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", ] [[package]] -name = "powerfmt" -version = "0.2.0" +name = "rustversion" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] -name = "ppv-lite86" -version = "0.2.17" +name = "ryu" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] -name = "prettyplease" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +name = "safelog" +version = "0.3.7" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "proc-macro2", - "syn 1.0.109", + "derive_more", + "educe", + "either", + "fluid-let", + "thiserror", ] [[package]] -name = "prettyplease" -version = "0.2.16" +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "proc-macro2", - "syn 2.0.72", + "winapi-util", ] [[package]] -name = "proc-macro-crate" -version = "3.1.0" +name = "sanitize-filename" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" dependencies = [ - "toml_edit", + "lazy_static", + "regex", ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "scoped-tls" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "proc-macro2" -version = "1.0.86" +name = "sct" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "unicode-ident", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] -name = "prometheus" -version = "0.13.4" +name = "sec1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf", - "thiserror", + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", ] [[package]] -name = "prost" -version = "0.11.9" +name = "secp256k1" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" dependencies = [ - "bytes", - "prost-derive 0.11.9", + "bitcoin_hashes 0.11.0", + "rand", + "secp256k1-sys 0.6.1", + "serde", ] [[package]] -name = "prost" -version = "0.12.6" +name = "secp256k1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "bytes", - "prost-derive 0.12.6", + "bitcoin_hashes 0.12.0", + "rand", + "secp256k1-sys 0.8.1", + "serde", ] [[package]] -name = "prost" -version = "0.13.1" +name = "secp256k1-sys" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13db3d3fde688c61e2446b4d843bc27a7e8af269a69440c0308021dc92333cc" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" dependencies = [ - "bytes", - "prost-derive 0.13.1", + "cc", ] [[package]] -name = "prost-build" -version = "0.11.9" +name = "secp256k1-sys" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" dependencies = [ - "bytes", - "heck 0.4.1", - "itertools 0.10.5", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease 0.1.25", - "prost 0.11.9", - "prost-types 0.11.9", - "regex", - "syn 1.0.109", - "tempfile", - "which", + "cc", ] [[package]] -name = "prost-build" -version = "0.12.3" +name = "secp256k1-zkp" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +checksum = "026efcdacb95ee6aae5cc19144dc1549973eac36a4972700c28493de1ee5d69f" dependencies = [ - "bytes", - "heck 0.4.1", - "itertools 0.11.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease 0.2.16", - "prost 0.12.6", - "prost-types 0.12.3", - "regex", - "syn 2.0.72", - "tempfile", - "which", + "bitcoin-private", + "rand", + "secp256k1 0.27.0", + "secp256k1-zkp-sys", + "serde", +] + +[[package]] +name = "secp256k1-zkp-sys" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d03ab1ca75a18e1899e8d9b8d28b5998ae1ddcb42fec5956769718543293c723" +dependencies = [ + "cc", + "secp256k1-sys 0.8.1", ] [[package]] -name = "prost-build" -version = "0.13.1" +name = "semver" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb182580f71dd070f88d01ce3de9f4da5021db7115d2e1c3605a754153b77c1" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "serde" +version = "1.0.205" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" dependencies = [ - "bytes", - "heck 0.5.0", - "itertools 0.13.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease 0.2.16", - "prost 0.13.1", - "prost-types 0.13.1", - "regex", - "syn 2.0.72", - "tempfile", + "serde_derive", ] [[package]] -name = "prost-derive" -version = "0.11.9" +name = "serde-big-array" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" dependencies = [ - "anyhow", - "itertools 0.10.5", - "proc-macro2", - "quote", - "syn 1.0.109", + "serde", ] [[package]] -name = "prost-derive" -version = "0.12.6" +name = "serde-value" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn 2.0.72", + "ordered-float 2.10.1", + "serde", ] [[package]] -name = "prost-derive" -version = "0.13.1" +name = "serde_derive" +version = "1.0.205" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" +checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" dependencies = [ - "anyhow", - "itertools 0.13.0", "proc-macro2", "quote", "syn 2.0.72", ] [[package]] -name = "prost-types" -version = "0.11.9" +name = "serde_ignored" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +checksum = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf" dependencies = [ - "prost 0.11.9", + "serde", ] [[package]] -name = "prost-types" -version = "0.12.3" +name = "serde_json" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ - "prost 0.12.6", + "itoa", + "memchr", + "ryu", + "serde", ] [[package]] -name = "prost-types" -version = "0.13.1" +name = "serde_path_to_error" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee5168b05f49d4b0ca581206eb14a7b22fafd963efe729ac48eb03266e25cc2" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ - "prost 0.13.1", + "itoa", + "serde", ] [[package]] -name = "protobuf" -version = "2.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" - -[[package]] -name = "quinn" -version = "0.11.2" +name = "serde_spanned" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash 1.1.0", - "rustls 0.23.7", - "thiserror", - "tokio", - "tracing", + "serde", ] [[package]] -name = "quinn-proto" -version = "0.11.3" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "bytes", - "rand", - "ring", - "rustc-hash 1.1.0", - "rustls 0.23.7", - "slab", - "thiserror", - "tinyvec", - "tracing", + "form_urlencoded", + "itoa", + "ryu", + "serde", ] [[package]] -name = "quinn-udp" -version = "0.5.2" +name = "serde_with" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" dependencies = [ - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.52.0", + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.5", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", ] [[package]] -name = "quote" -version = "1.0.36" +name = "serde_with_macros" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" dependencies = [ + "darling 0.20.8", "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" +name = "serdect" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "base16ct", + "serde", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "ppv-lite86", - "rand_core", + "cfg-if", + "cpufeatures", + "digest", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "getrandom", + "cfg-if", + "cpufeatures", + "digest", ] [[package]] -name = "rand_xoshiro" -version = "0.6.0" +name = "sha3" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "rand_core", + "digest", + "keccak", ] [[package]] -name = "rayon" -version = "1.10.0" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "either", - "rayon-core", + "lazy_static", ] [[package]] -name = "rayon-core" -version = "1.12.1" +name = "shellexpand" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "dirs", ] [[package]] -name = "rcgen" -version = "0.13.1" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" -dependencies = [ - "pem", - "ring", - "rustls-pki-types", - "time", - "yasna", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "redox_syscall" -version = "0.4.1" +name = "signal-hook-registry" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ - "bitflags 1.3.2", + "libc", ] [[package]] -name = "redox_users" -version = "0.4.4" +name = "signature" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "getrandom", - "libredox", - "thiserror", + "digest", + "rand_core", ] [[package]] -name = "regex" -version = "1.10.3" +name = "simple_asn1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.2", + "num-bigint", + "num-traits", + "thiserror", + "time", ] [[package]] -name = "regex-automata" -version = "0.1.10" +name = "siphasher" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] -name = "regex-automata" -version = "0.4.6" +name = "slab" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.2", + "autocfg", ] [[package]] -name = "regex-syntax" -version = "0.6.29" +name = "slotmap" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] [[package]] -name = "regex-syntax" -version = "0.8.2" +name = "smallvec" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] -name = "reqwest" -version = "0.11.27" +name = "socket2" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.11", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-rustls 0.24.1", - "tokio-socks", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.25.4", - "winreg 0.50.0", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "reqwest" -version = "0.12.5" +name = "soketto" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" dependencies = [ "base64 0.22.1", "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.4.4", + "futures", "http 1.1.0", - "http-body 1.0.1", - "http-body-util", - "hyper 1.4.1", - "hyper-rustls 0.27.2", - "hyper-util", - "ipnet", - "js-sys", + "httparse", "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls 0.23.7", - "rustls-pemfile 2.1.1", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "tokio", - "tokio-rustls 0.26.0", - "tokio-socks", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.26.3", - "winreg 0.52.0", + "rand", + "sha1", ] [[package]] -name = "ring" -version = "0.17.8" +name = "spin" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", -] +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "rocksdb" -version = "0.22.0" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd13e55d6d7b8cd0ea569161127567cd587676c99f4472f779a0279aa60a7a7" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ - "libc", - "librocksdb-sys", + "base64ct", + "der", ] [[package]] -name = "route-recognizer" -version = "0.3.1" +name = "ssh-cipher" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" +checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" +dependencies = [ + "cipher", + "ssh-encoding", +] [[package]] -name = "rusqlite" -version = "0.28.0" +name = "ssh-encoding" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" +checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" dependencies = [ - "bitflags 1.3.2", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "smallvec", + "base64ct", + "pem-rfc7468", + "sha2", ] [[package]] -name = "rustc-demangle" -version = "0.1.24" +name = "ssh-key" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "ca9b366a80cf18bb6406f4cf4d10aebfb46140a8c0c33f666a144c5c76ecbafc" +dependencies = [ + "p256", + "p384", + "p521", + "rand_core", + "rsa", + "sec1", + "sha2", + "signature", + "ssh-cipher", + "ssh-encoding", + "subtle", + "zeroize", +] [[package]] -name = "rustc-hash" +name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "rustc-hash" -version = "2.0.0" +name = "strsim" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] -name = "rustc_version" -version = "0.4.0" +name = "strsim" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" [[package]] -name = "rustix" -version = "0.38.31" +name = "strum" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "bitflags 2.4.2", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", + "strum_macros 0.25.3", ] [[package]] -name = "rustls" -version = "0.21.11" +name = "strum" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", + "strum_macros 0.26.4", ] [[package]] -name = "rustls" -version = "0.23.7" +name = "strum_macros" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.2", - "subtle", - "zeroize", + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", ] [[package]] -name = "rustls-pemfile" -version = "1.0.4" +name = "strum_macros" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "base64 0.21.7", + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", ] [[package]] -name = "rustls-pemfile" -version = "2.1.1" +name = "substring" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f48172685e6ff52a556baa527774f61fcaa884f59daf3375c62a3f1cd2549dab" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" dependencies = [ - "base64 0.21.7", - "rustls-pki-types", + "autocfg", ] [[package]] -name = "rustls-pki-types" -version = "1.8.0" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "rustls-webpki" -version = "0.101.7" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "ring", - "untrusted", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "rustls-webpki" -version = "0.102.2" +name = "syn" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "rustversion" -version = "1.0.14" +name = "sync_wrapper" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] -name = "ryu" -version = "1.0.17" +name = "sync_wrapper" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" [[package]] -name = "same-file" -version = "1.0.6" +name = "system-configuration" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ - "winapi-util", + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", ] [[package]] -name = "scoped-tls" -version = "1.0.1" +name = "system-configuration-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "tap" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] -name = "sct" -version = "0.7.1" +name = "tar" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" dependencies = [ - "ring", - "untrusted", + "filetime", + "libc", + "xattr", ] [[package]] -name = "secp256k1" -version = "0.24.3" +name = "tempfile" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ - "bitcoin_hashes 0.11.0", - "rand", - "secp256k1-sys 0.6.1", - "serde", + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] -name = "secp256k1" -version = "0.27.0" +name = "termcolor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ - "bitcoin_hashes 0.12.0", - "rand", - "secp256k1-sys 0.8.1", - "serde", + "winapi-util", ] [[package]] -name = "secp256k1-sys" -version = "0.6.1" +name = "test-log" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +checksum = "3dffced63c2b5c7be278154d76b479f9f9920ed34e7574201407f0b14e2bbb93" dependencies = [ - "cc", + "test-log-macros", + "tracing-subscriber", ] [[package]] -name = "secp256k1-sys" -version = "0.8.1" +name = "test-log-macros" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +checksum = "c8f546451eaa38373f549093fe9fd05e7d2bade739e2ddf834b9968621d60107" dependencies = [ - "cc", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "secp256k1-zkp" -version = "0.9.2" +name = "thiserror" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026efcdacb95ee6aae5cc19144dc1549973eac36a4972700c28493de1ee5d69f" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ - "bitcoin-private", - "rand", - "secp256k1 0.27.0", - "secp256k1-zkp-sys", - "serde", + "thiserror-impl", ] [[package]] -name = "secp256k1-zkp-sys" -version = "0.8.1" +name = "thiserror-impl" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03ab1ca75a18e1899e8d9b8d28b5998ae1ddcb42fec5956769718543293c723" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ - "cc", - "secp256k1-sys 0.8.1", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" - -[[package]] -name = "send_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" - -[[package]] -name = "serde" -version = "1.0.205" +name = "thread_local" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ - "serde_derive", + "cfg-if", + "once_cell", ] [[package]] -name = "serde-big-array" -version = "0.5.1" +name = "threadpool" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" dependencies = [ - "serde", + "num_cpus", ] [[package]] -name = "serde_derive" -version = "1.0.205" +name = "thrift" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "byteorder", + "integer-encoding", + "log", + "ordered-float 2.10.1", + "threadpool", ] [[package]] -name = "serde_json" -version = "1.0.122" +name = "time" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ + "deranged", "itoa", - "memchr", - "ryu", + "num-conv", + "powerfmt", "serde", + "time-core", + "time-macros", ] [[package]] -name = "serde_path_to_error" -version = "0.1.16" +name = "time-core" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" -dependencies = [ - "itoa", - "serde", -] +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "time-macros" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", + "num-conv", + "time-core", ] [[package]] -name = "serdect" -version = "0.2.0" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "base16ct", - "serde", + "crunchy", ] [[package]] -name = "sha1" -version = "0.10.6" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "cfg-if", - "cpufeatures", - "digest", + "displaydoc", ] [[package]] -name = "sha3" -version = "0.10.8" +name = "tinytemplate" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" dependencies = [ - "digest", - "keccak", + "serde", + "serde_json", ] [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "tinyvec" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ - "lazy_static", + "tinyvec_macros", ] [[package]] -name = "shlex" -version = "1.3.0" +name = "tinyvec_macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "tracing", + "windows-sys 0.52.0", +] [[package]] -name = "signal-hook-registry" -version = "1.4.1" +name = "tokio-io-timeout" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" dependencies = [ - "libc", + "pin-project-lite", + "tokio", ] [[package]] -name = "slab" -version = "0.4.9" +name = "tokio-macros" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ - "autocfg", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "smallvec" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" - -[[package]] -name = "socket2" -version = "0.5.6" +name = "tokio-rustls" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "libc", - "windows-sys 0.52.0", + "rustls 0.21.11", + "tokio", ] [[package]] -name = "soketto" -version = "0.8.0" +name = "tokio-rustls" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "base64 0.22.1", - "bytes", - "futures", - "http 1.1.0", - "httparse", - "log", - "rand", - "sha1", + "rustls 0.23.7", + "rustls-pki-types", + "tokio", ] [[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "strsim" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" - -[[package]] -name = "strum" -version = "0.26.3" +name = "tokio-socks" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +dependencies = [ + "either", + "futures-util", + "thiserror", + "tokio", +] [[package]] -name = "strum_macros" -version = "0.26.4" +name = "tokio-stream" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.72", + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", ] [[package]] -name = "substring" -version = "1.4.5" +name = "tokio-test" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" dependencies = [ - "autocfg", + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", ] [[package]] -name = "subtle" -version = "2.6.1" +name = "tokio-util" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite", + "tokio", +] [[package]] -name = "syn" -version = "1.0.109" +name = "toml" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.12", ] [[package]] -name = "syn" -version = "2.0.72" +name = "toml_datetime" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "serde", ] [[package]] -name = "sync_wrapper" -version = "0.1.2" +name = "toml_edit" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.5", + "toml_datetime", + "winnow 0.5.40", +] [[package]] -name = "sync_wrapper" -version = "1.0.1" +name = "toml_edit" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.5", + "toml_datetime", + "winnow 0.5.40", +] [[package]] -name = "system-configuration" -version = "0.5.1" +name = "toml_edit" +version = "0.22.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", + "indexmap 2.2.5", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.13", ] [[package]] -name = "system-configuration-sys" -version = "0.5.0" +name = "tonic" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" dependencies = [ - "core-foundation-sys", - "libc", + "async-stream", + "async-trait", + "axum 0.6.20", + "base64 0.21.7", + "bytes", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-timeout 0.4.1", + "percent-encoding", + "pin-project", + "prost 0.12.6", + "rustls 0.21.11", + "rustls-pemfile 1.0.4", + "tokio", + "tokio-rustls 0.24.1", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "tap" -version = "1.0.1" +name = "tonic" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +checksum = "38659f4a91aba8598d27821589f5db7dddd94601e7a01b1e485a50e5484c7401" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.7.5", + "base64 0.22.1", + "bytes", + "h2 0.4.4", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-timeout 0.5.1", + "hyper-util", + "percent-encoding", + "pin-project", + "prost 0.13.1", + "rustls-pemfile 2.1.1", + "socket2", + "tokio", + "tokio-rustls 0.26.0", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] [[package]] -name = "tar" -version = "0.4.41" +name = "tonic-build" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" +checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" dependencies = [ - "filetime", - "libc", - "xattr", + "prettyplease 0.2.16", + "proc-macro2", + "prost-build 0.12.3", + "quote", + "syn 2.0.72", ] [[package]] -name = "tempfile" -version = "3.12.0" +name = "tonic-build" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "568392c5a2bd0020723e3f387891176aabafe36fd9fcd074ad309dfa0c8eb964" dependencies = [ - "cfg-if", - "fastrand", - "once_cell", - "rustix", - "windows-sys 0.59.0", + "prettyplease 0.2.16", + "proc-macro2", + "prost-build 0.13.1", + "quote", + "syn 2.0.72", ] [[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +name = "tor-async-utils" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "winapi-util", + "futures", + "pin-project", + "postage", + "void", ] [[package]] -name = "test-log" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dffced63c2b5c7be278154d76b479f9f9920ed34e7574201407f0b14e2bbb93" +name = "tor-basic-utils" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "test-log-macros", - "tracing-subscriber", + "hex", + "libc", + "paste", + "rand", + "rand_chacha", + "slab", + "thiserror", ] [[package]] -name = "test-log-macros" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8f546451eaa38373f549093fe9fd05e7d2bade739e2ddf834b9968621d60107" +name = "tor-bytes" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "bytes", + "digest", + "educe", + "getrandom", + "thiserror", + "tor-error", + "tor-llcrypto", + "zeroize", ] [[package]] -name = "thiserror" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +name = "tor-cell" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "thiserror-impl", + "bitflags 2.4.2", + "bytes", + "caret", + "derive_more", + "educe", + "paste", + "rand", + "smallvec", + "thiserror", + "tor-basic-utils", + "tor-bytes", + "tor-cert", + "tor-error", + "tor-linkspec", + "tor-llcrypto", + "tor-units", ] [[package]] -name = "thiserror-impl" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +name = "tor-cert" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "caret", + "derive_more", + "digest", + "thiserror", + "tor-bytes", + "tor-checkable", + "tor-llcrypto", ] [[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +name = "tor-chanmgr" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "cfg-if", - "once_cell", + "async-trait", + "derive_builder_fork_arti", + "derive_more", + "educe", + "futures", + "postage", + "rand", + "safelog", + "serde", + "thiserror", + "tor-async-utils", + "tor-basic-utils", + "tor-cell", + "tor-config", + "tor-error", + "tor-linkspec", + "tor-llcrypto", + "tor-netdir", + "tor-proto", + "tor-rtcompat", + "tor-socksproto", + "tor-units", + "tracing", + "void", ] [[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +name = "tor-checkable" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "num_cpus", + "humantime", + "signature", + "thiserror", + "tor-llcrypto", ] [[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +name = "tor-circmgr" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float 2.10.1", - "threadpool", + "amplify", + "async-trait", + "bounded-vec-deque", + "cfg-if", + "derive_builder_fork_arti", + "derive_more", + "downcast-rs", + "dyn-clone", + "educe", + "futures", + "humantime-serde", + "itertools 0.13.0", + "once_cell", + "pin-project", + "rand", + "retry-error", + "safelog", + "serde", + "static_assertions", + "thiserror", + "tor-async-utils", + "tor-basic-utils", + "tor-chanmgr", + "tor-config", + "tor-error", + "tor-guardmgr", + "tor-linkspec", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-protover", + "tor-relay-selection", + "tor-rtcompat", + "tracing", + "void", + "weak-table", ] [[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +name = "tor-config" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", + "derive-deftly", + "derive_builder_fork_arti", + "directories", + "educe", + "either", + "figment", + "fs-mistrust", + "itertools 0.13.0", + "once_cell", + "paste", + "regex", "serde", - "time-core", - "time-macros", + "serde-value", + "serde_ignored", + "shellexpand", + "strum 0.26.3", + "thiserror", + "toml", + "tor-basic-utils", + "tor-error", + "tracing", + "void", ] [[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +name = "tor-consdiff" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +dependencies = [ + "digest", + "hex", + "thiserror", + "tor-llcrypto", +] [[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +name = "tor-dirclient" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "num-conv", - "time-core", + "async-compression", + "base64ct", + "derive_more", + "futures", + "hex", + "http 1.1.0", + "httparse", + "httpdate", + "itertools 0.13.0", + "memchr", + "thiserror", + "tor-circmgr", + "tor-error", + "tor-linkspec", + "tor-llcrypto", + "tor-netdoc", + "tor-proto", + "tor-rtcompat", + "tracing", ] [[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +name = "tor-dirmgr" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "crunchy", + "async-trait", + "base64ct", + "derive_builder_fork_arti", + "derive_more", + "digest", + "educe", + "event-listener", + "fs-mistrust", + "fslock", + "futures", + "hex", + "humantime", + "humantime-serde", + "itertools 0.13.0", + "memmap2 0.9.4", + "once_cell", + "paste", + "postage", + "rand", + "rusqlite", + "safelog", + "scopeguard", + "serde", + "signature", + "strum 0.26.3", + "thiserror", + "time", + "tor-async-utils", + "tor-basic-utils", + "tor-checkable", + "tor-circmgr", + "tor-config", + "tor-consdiff", + "tor-dirclient", + "tor-error", + "tor-guardmgr", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-rtcompat", + "tracing", ] [[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +name = "tor-error" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "serde", - "serde_json", + "backtrace", + "derive_more", + "futures", + "once_cell", + "paste", + "retry-error", + "static_assertions", + "strum 0.26.3", + "thiserror", + "tracing", ] [[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +name = "tor-guardmgr" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "tinyvec_macros", + "amplify", + "base64ct", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "dyn-clone", + "educe", + "futures", + "humantime", + "humantime-serde", + "itertools 0.13.0", + "num_enum", + "pin-project", + "postage", + "rand", + "safelog", + "serde", + "strum 0.26.3", + "thiserror", + "tor-async-utils", + "tor-basic-utils", + "tor-config", + "tor-error", + "tor-linkspec", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-relay-selection", + "tor-rtcompat", + "tor-units", + "tracing", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +name = "tor-hscrypto" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +dependencies = [ + "data-encoding", + "derive_more", + "digest", + "itertools 0.13.0", + "paste", + "rand", + "safelog", + "signature", + "subtle", + "thiserror", + "tor-basic-utils", + "tor-bytes", + "tor-error", + "tor-llcrypto", + "tor-units", +] [[package]] -name = "tokio" -version = "1.39.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +name = "tor-keymgr" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "tracing", - "windows-sys 0.52.0", + "amplify", + "arrayvec", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "downcast-rs", + "dyn-clone", + "fs-mistrust", + "glob-match", + "humantime", + "inventory", + "itertools 0.13.0", + "rand", + "serde", + "ssh-key", + "thiserror", + "tor-basic-utils", + "tor-config", + "tor-error", + "tor-hscrypto", + "tor-llcrypto", + "tor-persist", + "walkdir", + "zeroize", ] [[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +name = "tor-linkspec" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "pin-project-lite", - "tokio", + "base64ct", + "by_address", + "caret", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "hex", + "itertools 0.13.0", + "safelog", + "serde", + "serde_with", + "strum 0.26.3", + "thiserror", + "tor-basic-utils", + "tor-bytes", + "tor-config", + "tor-llcrypto", + "tor-protover", ] [[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +name = "tor-llcrypto" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "aes", + "base64ct", + "ctr", + "curve25519-dalek", + "derive_more", + "digest", + "ed25519-dalek", + "educe", + "getrandom", + "hex", + "rand_core", + "rsa", + "safelog", + "serde", + "sha1", + "sha2", + "sha3", + "signature", + "simple_asn1", + "subtle", + "thiserror", + "x25519-dalek", + "zeroize", ] [[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +name = "tor-log-ratelim" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "rustls 0.21.11", - "tokio", + "futures", + "humantime", + "once_cell", + "thiserror", + "tor-error", + "tor-rtcompat", + "tracing", + "weak-table", ] [[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +name = "tor-netdir" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "rustls 0.23.7", - "rustls-pki-types", - "tokio", + "bitflags 2.4.2", + "derive_more", + "futures", + "humantime", + "itertools 0.13.0", + "num_enum", + "rand", + "serde", + "static_assertions", + "strum 0.26.3", + "thiserror", + "tor-basic-utils", + "tor-error", + "tor-linkspec", + "tor-llcrypto", + "tor-netdoc", + "tor-protover", + "tor-units", + "tracing", + "typed-index-collections", ] [[package]] -name = "tokio-socks" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +name = "tor-netdoc" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "either", - "futures-util", + "amplify", + "base64ct", + "bitflags 2.4.2", + "cipher", + "derive_builder_fork_arti", + "derive_more", + "digest", + "educe", + "hex", + "humantime", + "itertools 0.13.0", + "once_cell", + "phf", + "serde", + "serde_with", + "signature", + "smallvec", + "subtle", "thiserror", - "tokio", + "time", + "tinystr", + "tor-basic-utils", + "tor-bytes", + "tor-cell", + "tor-cert", + "tor-checkable", + "tor-error", + "tor-llcrypto", + "tor-protover", + "weak-table", + "zeroize", ] [[package]] -name = "tokio-stream" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +name = "tor-persist" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", + "derive-deftly", + "derive_more", + "filetime", + "fs-mistrust", + "fslock", + "futures", + "itertools 0.13.0", + "paste", + "sanitize-filename", + "serde", + "serde_json", + "thiserror", + "tor-async-utils", + "tor-basic-utils", + "tor-error", + "tracing", + "void", ] [[package]] -name = "tokio-test" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +name = "tor-proto" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "async-stream", + "asynchronous-codec", + "bitvec", "bytes", - "futures-core", + "cipher", + "coarsetime", + "derive_builder_fork_arti", + "derive_more", + "digest", + "educe", + "futures", + "hkdf", + "hmac", + "pin-project", + "rand", + "rand_core", + "safelog", + "subtle", + "thiserror", "tokio", - "tokio-stream", + "tokio-util", + "tor-async-utils", + "tor-basic-utils", + "tor-bytes", + "tor-cell", + "tor-cert", + "tor-checkable", + "tor-config", + "tor-error", + "tor-linkspec", + "tor-llcrypto", + "tor-log-ratelim", + "tor-rtcompat", + "tor-rtmock", + "tor-units", + "tracing", + "typenum", + "void", + "zeroize", ] [[package]] -name = "tokio-util" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +name = "tor-protover" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite", - "tokio", + "caret", + "thiserror", ] [[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +name = "tor-relay-selection" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "indexmap 2.2.5", - "toml_datetime", - "winnow", + "rand", + "serde", + "tor-basic-utils", + "tor-linkspec", + "tor-netdir", + "tor-netdoc", ] [[package]] -name = "tonic" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +name = "tor-rtcompat" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "async-stream", "async-trait", - "axum 0.6.20", - "base64 0.21.7", - "bytes", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", - "hyper-timeout 0.4.1", - "percent-encoding", + "async_executors", + "coarsetime", + "derive_more", + "educe", + "futures", + "futures-rustls", + "paste", "pin-project", - "prost 0.12.6", - "rustls 0.21.11", - "rustls-pemfile 1.0.4", + "rustls-pki-types", + "thiserror", "tokio", - "tokio-rustls 0.24.1", - "tokio-stream", - "tower", - "tower-layer", - "tower-service", + "tokio-util", + "tor-error", "tracing", + "x509-signature", ] [[package]] -name = "tonic" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38659f4a91aba8598d27821589f5db7dddd94601e7a01b1e485a50e5484c7401" +name = "tor-rtmock" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "async-stream", + "amplify", "async-trait", - "axum 0.7.5", - "base64 0.22.1", - "bytes", - "h2 0.4.4", - "http 1.1.0", - "http-body 1.0.1", - "http-body-util", - "hyper 1.4.1", - "hyper-timeout 0.5.1", - "hyper-util", - "percent-encoding", + "backtrace", + "derive-deftly", + "derive_more", + "educe", + "futures", + "humantime", + "itertools 0.13.0", "pin-project", - "prost 0.13.1", - "rustls-pemfile 2.1.1", - "socket2", - "tokio", - "tokio-rustls 0.26.0", - "tokio-stream", - "tower", - "tower-layer", - "tower-service", + "priority-queue", + "slotmap", + "strum 0.26.3", + "thiserror", + "tor-async-utils", + "tor-error", + "tor-rtcompat", "tracing", + "tracing-test", + "void", ] [[package]] -name = "tonic-build" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" +name = "tor-socksproto" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "prettyplease 0.2.16", - "proc-macro2", - "prost-build 0.12.3", - "quote", - "syn 2.0.72", + "caret", + "subtle", + "thiserror", + "tor-bytes", + "tor-error", ] [[package]] -name = "tonic-build" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568392c5a2bd0020723e3f387891176aabafe36fd9fcd074ad309dfa0c8eb964" +name = "tor-units" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" dependencies = [ - "prettyplease 0.2.16", - "proc-macro2", - "prost-build 0.13.1", - "quote", - "syn 2.0.72", + "derive_more", + "thiserror", ] [[package]] @@ -6182,6 +8147,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typed-index-collections" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183496e014253d15abbe6235677b1392dba2d40524c88938991226baa38ac7c4" + [[package]] name = "typeid" version = "1.0.0" @@ -6194,6 +8165,15 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -6215,6 +8195,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" @@ -6257,6 +8243,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "vss-client" version = "0.2.2" @@ -6295,6 +8287,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi", +] + [[package]] name = "wasm-bindgen" version = "0.2.92" @@ -6386,6 +8387,12 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "weak-table" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" + [[package]] name = "web-sys" version = "0.3.66" @@ -6412,8 +8419,8 @@ version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring", - "untrusted", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] @@ -6649,6 +8656,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -6678,6 +8694,28 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core", + "serde", + "zeroize", +] + +[[package]] +name = "x509-signature" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb2bc2a902d992cd5f471ee3ab0ffd6603047a4207384562755b9d6de977518" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + [[package]] name = "xattr" version = "1.3.1" @@ -6723,6 +8761,20 @@ name = "zeroize" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] [[package]] name = "zstd-sys" diff --git a/deny.toml b/deny.toml index 496124463f7..4ab7ef027ff 100644 --- a/deny.toml +++ b/deny.toml @@ -144,6 +144,9 @@ exceptions = [ { allow = [ "Zlib", ], name = "tinyvec" }, + { allow = [ + "Zlib", + ], name = "slotmap" }, { allow = [ "Unicode-DFS-2016", ], name = "unicode-ident" }, diff --git a/fedimint-api-client/Cargo.toml b/fedimint-api-client/Cargo.toml index d9520f752e5..7b3356e5e71 100644 --- a/fedimint-api-client/Cargo.toml +++ b/fedimint-api-client/Cargo.toml @@ -48,6 +48,8 @@ tokio-rustls = { version = "0.26.0", default-features = false, features = [ ] } webpki-roots = { version = "0.26.3" } rustls-pki-types = { version = "1.8.0" } +arti-client = { git = "https://github.com/oleonardolima/arti", branch = "feat/downgrade-rusqlite", version = "0.20.0", features = ["tokio", "rustls"], default-features = false } +strum = { version = "0.26.3" } [target.'cfg(target_family = "wasm")'.dependencies] jsonrpsee-wasm-client = "0.24.2" diff --git a/fedimint-api-client/src/api/federation_peer_client.rs b/fedimint-api-client/src/api/federation_peer_client.rs index f003e365a03..906b4891119 100644 --- a/fedimint-api-client/src/api/federation_peer_client.rs +++ b/fedimint-api-client/src/api/federation_peer_client.rs @@ -9,7 +9,7 @@ use fedimint_logging::LOG_CLIENT_NET_API; use tokio::sync::{Mutex, RwLock}; use tracing::debug; -use super::JsonRpcClient; +use super::{Connector, JsonRpcClient}; // TODO(tvolk131): Merge this with `FederationPeerClient`. #[derive(Debug)] @@ -18,14 +18,21 @@ pub struct FederationPeer { pub peer_id: PeerId, pub api_secret: Option, pub client: RwLock>, + pub connector: Connector, } impl FederationPeer where C: JsonRpcClient + 'static, { - pub fn new(url: SafeUrl, peer_id: PeerId, api_secret: Option) -> Self { + pub fn new( + connector: Connector, + url: SafeUrl, + peer_id: PeerId, + api_secret: Option, + ) -> Self { let client = RwLock::new(FederationPeerClient::new( + connector, peer_id, url.clone(), api_secret.clone(), @@ -36,6 +43,7 @@ where peer_id, api_secret, client, + connector, } } } @@ -52,18 +60,30 @@ impl FederationPeerClient where C: JsonRpcClient + 'static, { - fn new(peer_id: PeerId, url: SafeUrl, api_secret: Option) -> Self { + fn new( + connector: Connector, + peer_id: PeerId, + url: SafeUrl, + api_secret: Option, + ) -> Self { let connection_state = Arc::new(tokio::sync::Mutex::new( FederationPeerClientConnectionState::new(), )); Self { - client: Self::new_jit_client(peer_id, url, api_secret, connection_state.clone()), + client: Self::new_jit_client( + connector, + peer_id, + url, + api_secret, + connection_state.clone(), + ), connection_state, } } fn new_jit_client( + connector: Connector, peer_id: PeerId, url: SafeUrl, api_secret: Option, @@ -72,7 +92,13 @@ where JitTryAnyhow::new_try(move || async move { Self::wait(&peer_id, &url, &connection_state).await; - let res = C::connect(&url, api_secret).await; + let res = match connector { + Connector::Tcp => C::connect(&url, api_secret).await, + #[cfg(not(target_family = "wasm"))] + Connector::Tor => C::connect_with_tor(&url, api_secret).await, + #[cfg(target_family = "wasm")] + Connector::Tor => unimplemented!(), + }; match &res { Ok(_) => { @@ -95,8 +121,20 @@ where }) } - pub fn reconnect(&mut self, peer_id: PeerId, url: SafeUrl, api_secret: Option) { - self.client = Self::new_jit_client(peer_id, url, api_secret, self.connection_state.clone()); + pub fn reconnect( + &mut self, + connector: Connector, + peer_id: PeerId, + url: SafeUrl, + api_secret: Option, + ) { + self.client = Self::new_jit_client( + connector, + peer_id, + url, + api_secret, + self.connection_state.clone(), + ); } async fn wait( diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index 7aa14b69d4d..11d0e6551cd 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -1,11 +1,14 @@ use std::collections::{BTreeMap, BTreeSet, HashMap}; use std::fmt::{self, Debug, Display}; use std::pin::Pin; +use std::str::FromStr; use std::sync::Arc; use std::time::Duration; use std::{cmp, result}; use anyhow::anyhow; +#[cfg(not(target_family = "wasm"))] +use arti_client::{TorAddr, TorClient, TorClientConfig}; use base64::Engine as _; use bitcoin::hashes::sha256; use bitcoin::secp256k1; @@ -47,7 +50,9 @@ use serde::{Deserialize, Serialize}; use serde_json::Value; use thiserror::Error; #[cfg(not(target_family = "wasm"))] -use tokio_rustls::rustls::RootCertStore; +use tokio_rustls::rustls::{ClientConfig as TlsClientConfig, RootCertStore}; +#[cfg(not(target_family = "wasm"))] +use tokio_rustls::TlsConnector; use tracing::{debug, error, instrument, trace, warn}; use crate::query::{QueryStep, QueryStrategy, ThresholdConsensus}; @@ -113,7 +118,7 @@ impl PeerError { /// An API request error when calling an entire federation /// -/// Generally all Federation errors are retriable. +/// Generally all Federation errors are retryable. #[derive(Debug, Error)] pub struct FederationError { method: String, @@ -538,10 +543,17 @@ impl AsRef for DynGlobalApi { } } +// FIXME: (@leonardo) how should this handle the different [`Connector`]'s ? +// Using [`Connector::default()`] for now. impl DynGlobalApi { - pub fn new_admin(peer: PeerId, url: SafeUrl, api_secret: &Option) -> DynGlobalApi { + pub fn new_admin( + peer: PeerId, + url: SafeUrl, + api_secret: &Option, + connector: &Connector, + ) -> DynGlobalApi { GlobalFederationApiWithCache::new( - WsFederationApi::new(vec![(peer, url)], api_secret).with_self_peer_id(peer), + WsFederationApi::new(connector, vec![(peer, url)], api_secret).with_self_peer_id(peer), ) .into() } @@ -551,25 +563,34 @@ impl DynGlobalApi { // big number so it stands out let peer_id = PeerId::from(1024); GlobalFederationApiWithCache::new( - WsFederationApi::new(vec![(peer_id, url)], api_secret).with_self_peer_id(peer_id), + WsFederationApi::new(&Connector::default(), vec![(peer_id, url)], api_secret) + .with_self_peer_id(peer_id), ) .into() } pub fn from_single_endpoint(peer: PeerId, url: SafeUrl, api_secret: &Option) -> Self { - GlobalFederationApiWithCache::new(WsFederationApi::new(vec![(peer, url)], api_secret)) - .into() + GlobalFederationApiWithCache::new(WsFederationApi::new( + &Connector::default(), + vec![(peer, url)], + api_secret, + )) + .into() } pub fn from_endpoints( peers: impl IntoIterator, api_secret: &Option, + connector: &Connector, ) -> Self { - GlobalFederationApiWithCache::new(WsFederationApi::new(peers, api_secret)).into() + GlobalFederationApiWithCache::new(WsFederationApi::new(connector, peers, api_secret)).into() } + // FIXME: (@leonardo) should the `Connector` be encoded in the `InviteCode` + // somehow ? pub fn from_invite_code(invite_code: &InviteCode) -> Self { GlobalFederationApiWithCache::new(WsFederationApi::new( + &Connector::default(), invite_code.peers().into_iter().collect_vec(), &invite_code.api_secret(), )) @@ -602,6 +623,55 @@ impl DynGlobalApi { } } +#[derive(Clone, Copy, Debug)] +pub enum Connector { + Tcp, + Tor, +} + +impl Default for Connector { + fn default() -> Self { + Self::Tcp + } +} + +#[allow(dead_code)] +impl Connector { + /// Returns `true` if the connector is [`Tcp`]. + /// + /// [`Tcp`]: Connector::Tcp + #[must_use] + fn is_tcp(self) -> bool { + matches!(self, Self::Tcp) + } + + /// Returns `true` if the connector is [`Tor`]. + /// + /// [`Tor`]: Connector::Tor + #[must_use] + fn is_tor(self) -> bool { + matches!(self, Self::Tor) + } +} + +impl fmt::Display for Connector { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{self:?}") + } +} + +impl FromStr for Connector { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + match s { + "Tcp" => Ok(Connector::Tcp), + "Tor" => Ok(Connector::Tor), + _ => Err("invalid connector!"), + } + } +} + /// The API for the global (non-module) endpoints #[apply(async_trait_maybe_send!)] pub trait IGlobalFederationApi: IRawFederationApi { @@ -783,7 +853,7 @@ pub struct WsFederationApi { impl IModuleFederationApi for WsFederationApi {} -/// Implementation of API calls over websockets +/// Implementation of API calls over WebSockets /// /// Can function as either the global or module API #[apply(async_trait_maybe_send!)] @@ -832,6 +902,13 @@ pub trait JsonRpcClient: ClientT + Sized + MaybeSend + MaybeSync { url: &SafeUrl, api_secret: Option, ) -> result::Result; + + #[cfg(not(target_family = "wasm"))] + async fn connect_with_tor( + url: &SafeUrl, + api_secret: Option, + ) -> result::Result; + fn is_connected(&self) -> bool; } @@ -893,6 +970,102 @@ impl JsonRpcClient for WsClient { client.build(url.as_str()).await } + #[cfg(not(target_family = "wasm"))] + async fn connect_with_tor( + url: &SafeUrl, + api_secret: Option, + ) -> result::Result { + let tor_config = TorClientConfig::default(); + let tor_client = TorClient::create_bootstrapped(tor_config) + .await + .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + + // TODO: (@leonardo) should we implement our `IntoTorAddr` for `SafeUrl` + // instead? + let addr = ( + url.host_str() + .expect("It should've asserted for `host` on construction"), + url.port_or_known_default() + .expect("It should've asserted for `port`, or used a default one, on construction"), + ); + let tor_addr = TorAddr::from(addr).map_err(|e| JsonRpcClientError::Transport(e.into()))?; + + let anonymized_stream = tor_client + .connect(tor_addr) + .await + .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + + let is_tls = match url.scheme() { + "wss" => true, + "ws" => false, + unexpected_scheme => { + let error = + format!("`{unexpected_scheme}` not supported, it's expected `ws` or `wss`!"); + return Err(JsonRpcClientError::Transport(anyhow!(error).into())); + } + }; + + let tls_connector = if is_tls { + let webpki_roots = webpki_roots::TLS_SERVER_ROOTS.iter().cloned(); + let mut root_certs = RootCertStore::empty(); + root_certs.extend(webpki_roots); + + let tls_config = TlsClientConfig::builder() + .with_root_certificates(root_certs) + .with_no_client_auth(); + let tls_connector = TlsConnector::from(Arc::new(tls_config)); + Some(tls_connector) + } else { + None + }; + + let mut ws_client_builder = + WsClientBuilder::default().max_concurrent_requests(u16::MAX as usize); + + if let Some(api_secret) = api_secret { + // on native platforms, jsonrpsee-client ignores `user:pass@...` in the Url, + // but we can set up the headers manually + let mut headers = HeaderMap::new(); + + let auth = + base64::engine::general_purpose::STANDARD.encode(format!("fedimint:{api_secret}")); + + headers.insert( + "Authorization", + HeaderValue::from_str(&format!("Basic {auth}")).expect("Can't fail"), + ); + + ws_client_builder = ws_client_builder.set_headers(headers); + } + + match tls_connector { + None => { + return ws_client_builder + .build_with_stream(url.as_str(), anonymized_stream) + .await; + } + Some(tls_connector) => { + let host = url.host_str().map(ToOwned::to_owned).ok_or_else(|| { + JsonRpcClientError::Transport(anyhow!("Invalid host!").into()) + })?; + + // FIXME: (@leonardo) Is this leaking any data ? Should investigate it further + // if it's really needed. + let server_name = rustls_pki_types::ServerName::try_from(host) + .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + + let anonymized_tls_stream = tls_connector + .connect(server_name, anonymized_stream) + .await + .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + + return ws_client_builder + .build_with_stream(url.as_str(), anonymized_tls_stream) + .await; + } + } + } + fn is_connected(&self) -> bool { self.is_connected() } @@ -901,10 +1074,11 @@ impl JsonRpcClient for WsClient { impl WsFederationApi { /// Creates a new API client pub fn new( + connector: &Connector, peers: impl IntoIterator, api_secret: &Option, ) -> Self { - Self::new_with_client(peers, None, api_secret) + Self::new_with_client(connector, peers, None, api_secret) } pub fn with_self_peer_id(self, self_peer_id: PeerId) -> Self { @@ -919,12 +1093,14 @@ impl WsFederationApi where C: JsonRpcClient + 'static, { + /// Returns the [`PeerId`]'s for the current [`WsFederationApi`] pub fn peers(&self) -> Vec { self.peers.iter().map(|peer| peer.peer_id).collect() } - /// Creates a new API client + /// Creates a new [`WsFederationApi`] client, for given [`Connector`]. pub fn new_with_client( + connector: &Connector, peers: impl IntoIterator, self_peer_id: Option, api_secret: &Option, @@ -939,7 +1115,7 @@ where assert!(url.host().is_some(), "API client requires a target host"); ( - FederationPeer::new(url, peer_id, api_secret.clone()), + FederationPeer::new(*connector, url, peer_id, api_secret.clone()), peer_id, ) }) @@ -1006,7 +1182,12 @@ where trace!(target: LOG_CLIENT_NET_API, "Some other request reconnected client, retrying"); } _ => { - wclient.reconnect(self.peer_id, self.url.clone(), self.api_secret.clone()); + wclient.reconnect( + self.connector, + self.peer_id, + self.url.clone(), + self.api_secret.clone(), + ); } } } @@ -1016,7 +1197,6 @@ where } impl WsFederationApi {} - /// The status of a server, including how it views its peers #[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)] pub struct FederationStatus { @@ -1077,6 +1257,7 @@ mod tests { #[apply(async_trait_maybe_send!)] trait SimpleClient: Sized { async fn connect() -> Result; + async fn connect_with_tor() -> Result; fn is_connected(&self) -> bool { true } @@ -1088,13 +1269,17 @@ mod tests { #[apply(async_trait_maybe_send!)] impl JsonRpcClient for Client { - fn is_connected(&self) -> bool { - self.0.is_connected() - } - async fn connect(_url: &SafeUrl, _api_secret: Option) -> Result { Ok(Self(C::connect().await?)) } + + async fn connect_with_tor(_url: &SafeUrl, _api_secret: Option) -> Result { + Ok(Self(C::connect_with_tor().await?)) + } + + fn is_connected(&self) -> bool { + self.0.is_connected() + } } #[apply(async_trait_maybe_send!)] diff --git a/fedimint-api-client/src/lib.rs b/fedimint-api-client/src/lib.rs index e79588051eb..3c238c00abd 100644 --- a/fedimint-api-client/src/lib.rs +++ b/fedimint-api-client/src/lib.rs @@ -6,7 +6,7 @@ #![allow(clippy::return_self_not_must_use)] use anyhow::{bail, Context as _}; -use api::{DynGlobalApi, FederationApiExt as _, WsFederationApi}; +use api::{Connector, DynGlobalApi, FederationApiExt as _, WsFederationApi}; use fedimint_core::config::{ClientConfig, FederationId}; use fedimint_core::endpoint_constants::CLIENT_CONFIG_ENDPOINT; use fedimint_core::invite_code::InviteCode; @@ -20,19 +20,26 @@ pub mod api; /// Client query system pub mod query; -/// Tries to download the client config from the federation, -/// attempts to retry teb times before giving up. -pub async fn download_from_invite_code(invite_code: &InviteCode) -> anyhow::Result { +// FIXME: (@leonardo) how should this fns handle different [`Connector`]'s + +/// Tries to download the [`ClientConfig`] from the federation, +/// attempts to retry ten times before giving up. +pub async fn download_from_invite_code( + connector: Connector, + invite_code: &InviteCode, +) -> anyhow::Result { debug!("Downloading client config from {:?}", invite_code); let federation_id = invite_code.federation_id(); + // FIXME: (@leonardo) should fetch all the api_endpoints with proper + // [`Connector`] too! let api = DynGlobalApi::from_invite_code(invite_code); let api_secret = invite_code.api_secret(); fedimint_core::util::retry( "Downloading client config", backoff_util::aggressive_backoff(), - || try_download_client_config(&api, federation_id, api_secret.clone()), + || try_download_client_config(&api, connector, federation_id, api_secret.clone()), ) .await .context("Failed to download client config") @@ -41,6 +48,7 @@ pub async fn download_from_invite_code(invite_code: &InviteCode) -> anyhow::Resu /// Tries to download the client config only once. pub async fn try_download_client_config( api: &DynGlobalApi, + connector: Connector, federation_id: FederationId, api_secret: Option, ) -> anyhow::Result { @@ -67,7 +75,7 @@ pub async fn try_download_client_config( // now we can build an api for all guardians and download the client config let api_endpoints = api_endpoints.into_iter().map(|(peer, url)| (peer, url.url)); - let client_config = WsFederationApi::new(api_endpoints, &api_secret) + let client_config = WsFederationApi::new(&connector, api_endpoints, &api_secret) .request_current_consensus::( CLIENT_CONFIG_ENDPOINT.to_owned(), ApiRequestErased::default(), diff --git a/fedimint-cli/src/envs.rs b/fedimint-cli/src/envs.rs index 3c763f11592..c8410a57e04 100644 --- a/fedimint-cli/src/envs.rs +++ b/fedimint-cli/src/envs.rs @@ -5,6 +5,9 @@ pub const FM_CLIENT_DIR_ENV: &str = "FM_CLIENT_DIR"; // Env variable to set the peer id of the guardian pub const FM_OUR_ID_ENV: &str = "FM_OUR_ID"; +// Env variable to set the connector choice (e.g Tcp / Tor) +pub const FM_CONNECTOR_ENV: &str = "FM_CONNECTOR"; + // Env variable to set the guardian password for authentication pub const FM_PASSWORD_ENV: &str = "FM_PASSWORD"; diff --git a/fedimint-cli/src/lib.rs b/fedimint-cli/src/lib.rs index 2b82b58dd46..636a2bcaa18 100644 --- a/fedimint-cli/src/lib.rs +++ b/fedimint-cli/src/lib.rs @@ -27,10 +27,10 @@ use anyhow::{format_err, Context}; use bip39::Mnemonic; use clap::{Args, CommandFactory, Parser, Subcommand}; use db_locked::LockedBuilder; -use envs::{FM_API_SECRET_ENV, SALT_FILE}; +use envs::{FM_API_SECRET_ENV, FM_CONNECTOR_ENV, SALT_FILE}; use fedimint_aead::{encrypted_read, encrypted_write, get_encryption_key}; use fedimint_api_client::api::{ - DynGlobalApi, FederationApiExt, FederationError, IRawFederationApi, WsFederationApi, + Connector, DynGlobalApi, FederationApiExt, FederationError, IRawFederationApi, WsFederationApi, }; use fedimint_bip39::Bip39RootSecretStrategy; use fedimint_client::meta::{FetchKind, MetaSource}; @@ -61,7 +61,7 @@ use serde::{Deserialize, Serialize}; use serde_json::{json, Value}; use thiserror::Error; use tracing::{debug, info}; -use utils::parse_peer_id; +use utils::{parse_connector, parse_peer_id}; use crate::client::ClientCmd; use crate::envs::{FM_CLIENT_DIR_ENV, FM_OUR_ID_ENV, FM_PASSWORD_ENV}; @@ -210,6 +210,10 @@ struct Opts { #[arg(long, env = FM_PASSWORD_ENV)] password: Option, + /// Connector (e.g. Tcp / Tor) + #[arg(env = FM_CONNECTOR_ENV, value_parser = parse_connector)] + connector: Option, + /// Activate more verbose logging, for full control use the RUST_LOG env /// variable #[arg(short = 'v', long)] @@ -235,12 +239,17 @@ impl Opts { Ok(dir) } + // FIXME: (@leonardo) How should the connector selection should be handled here + // ? fn admin_client( &self, peer_urls: &BTreeMap, api_secret: &Option, ) -> CliResult { let our_id = self.our_id.ok_or_cli_msg("Admin client needs our-id set")?; + let connector = self + .connector + .ok_or_cli_msg("Admin client needs connector set")?; Ok(DynGlobalApi::new_admin( our_id, peer_urls @@ -249,6 +258,7 @@ impl Opts { .context("Our peer URL not found in config") .map_err_cli()?, api_secret, + &connector, )) } @@ -618,9 +628,12 @@ impl FedimintCli { cli: &Opts, invite_code: InviteCode, ) -> CliResult { - let client_config = fedimint_api_client::download_from_invite_code(&invite_code) - .await - .map_err_cli()?; + let client_config = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + &invite_code, + ) + .await + .map_err_cli()?; let client_builder = self.make_client_builder(cli).await?; @@ -679,9 +692,12 @@ impl FedimintCli { ) -> CliResult { let builder = self.make_client_builder(cli).await?; - let client_config = fedimint_api_client::download_from_invite_code(&invite_code) - .await - .map_err_cli()?; + let client_config = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + &invite_code, + ) + .await + .map_err_cli()?; match Client::load_decodable_client_secret_opt::>(builder.db_no_decoders()) .await @@ -877,8 +893,13 @@ impl FedimintCli { } let client = self.client_open(&cli).await?; - let ws_api: Arc<_> = - WsFederationApi::new(client.get_peer_urls().await, client.api_secret()).into(); + // FIXME: Should the connector be fetched from the client somehow ? + let ws_api: Arc<_> = WsFederationApi::new( + &Connector::default(), + client.get_peer_urls().await, + client.api_secret(), + ) + .into(); let response: Value = match peer_id { Some(peer_id) => ws_api .request_raw(peer_id.into(), &method, &[params.to_json()]) diff --git a/fedimint-cli/src/utils.rs b/fedimint-cli/src/utils.rs index 18193af856a..6880311ecbf 100644 --- a/fedimint-cli/src/utils.rs +++ b/fedimint-cli/src/utils.rs @@ -1,7 +1,12 @@ use std::num::ParseIntError; +use fedimint_api_client::api::Connector; use fedimint_core::PeerId; pub fn parse_peer_id(s: &str) -> Result { Ok(PeerId::from(s.parse::()?)) } + +pub fn parse_connector(s: &str) -> Result { + s.parse::() +} diff --git a/fedimint-client-wasm/src/lib.rs b/fedimint-client-wasm/src/lib.rs index affb78d5134..d101e4ff4f7 100644 --- a/fedimint-client-wasm/src/lib.rs +++ b/fedimint-client-wasm/src/lib.rs @@ -59,7 +59,11 @@ impl WasmClient { // FIXME: add wallet module builder.with_primary_module(1); let invite_code = InviteCode::from_str(&invite_code)?; - let config = fedimint_api_client::download_from_invite_code(&invite_code).await?; + let config = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + &invite_code, + ) + .await?; let client = Arc::new(builder.join(root_secret, config, None).await?); Ok(Self { client }) } diff --git a/fedimint-client/src/lib.rs b/fedimint-client/src/lib.rs index 5f3091d1daf..87f7cb124ea 100644 --- a/fedimint-client/src/lib.rs +++ b/fedimint-client/src/lib.rs @@ -98,7 +98,7 @@ use db::{ PeerLastApiVersionsSummary, PeerLastApiVersionsSummaryKey, CORE_CLIENT_DATABASE_VERSION, }; use fedimint_api_client::api::{ - ApiVersionSet, DynGlobalApi, DynModuleApi, FederationApiExt, IGlobalFederationApi, + ApiVersionSet, Connector, DynGlobalApi, DynModuleApi, FederationApiExt, IGlobalFederationApi, }; use fedimint_core::config::{ ClientConfig, FederationId, GlobalClientConfig, JsonClientConfig, ModuleInitRegistry, @@ -777,6 +777,7 @@ pub struct Client { operation_log: OperationLog, secp_ctx: Secp256k1, meta_service: Arc, + connector: Connector, task_group: TaskGroup, @@ -2036,6 +2037,7 @@ pub struct ClientBuilder { admin_creds: Option, db_no_decoders: Database, meta_service: Arc, + connector: Connector, stopped: bool, } @@ -2045,6 +2047,7 @@ impl ClientBuilder { ClientBuilder { module_inits: ModuleInitRegistry::new(), primary_module_instance: None, + connector: Connector::default(), admin_creds: None, db_no_decoders: db, stopped: false, @@ -2061,6 +2064,7 @@ impl ClientBuilder { stopped: false, // non unique meta_service: client.meta_service.clone(), + connector: client.connector, } } @@ -2140,6 +2144,14 @@ impl ClientBuilder { self.admin_creds = Some(creds); } + pub fn with_connector(&mut self, connector: Connector) { + self.connector = connector; + } + + pub fn with_tor_connector(&mut self) { + self.with_connector(Connector::Tor); + } + async fn init( self, pre_root_secret: DerivableSecret, @@ -2223,7 +2235,7 @@ impl ClientBuilder { /// // Get invite code from user /// let invite_code = InviteCode::from_str("fed11qgqpw9thwvaz7te3xgmjuvpwxqhrzw3jxumrvvf0qqqjpetvlg8glnpvzcufhffgzhv8m75f7y34ryk7suamh8x7zetly8h0v9v0rm") /// .expect("Invalid invite code"); - /// let config = fedimint_api_client::download_from_invite_code(&invite_code).await + /// let config = fedimint_api_client::download_from_invite_code(fedimint_api_client::api::Connector::default(), &invite_code).await /// .expect("Error downloading config"); /// /// // Tell the user the federation name, bitcoin network @@ -2276,6 +2288,7 @@ impl ClientBuilder { config: &ClientConfig, api_secret: Option, ) -> anyhow::Result> { + let connector = self.connector; let api = DynGlobalApi::from_endpoints( // TODO: change join logic to use FederationId v2 config @@ -2284,6 +2297,7 @@ impl ClientBuilder { .iter() .map(|(peer_id, peer_url)| (*peer_id, peer_url.url.clone())), &api_secret, + &connector, ); Client::download_backup_from_federation_static( &api, @@ -2394,6 +2408,7 @@ impl ClientBuilder { let config = Self::config_decoded(config, &decoders)?; let fed_id = config.calculate_federation_id(); let db = self.db_no_decoders.with_decoders(decoders.clone()); + let connector = self.connector; let peer_urls = get_api_urls(&db, &config).await; let api = if let Some(admin_creds) = self.admin_creds.as_ref() { DynGlobalApi::new_admin( @@ -2403,9 +2418,10 @@ impl ClientBuilder { .find_map(|(peer, api_url)| (admin_creds.peer_id == peer).then_some(api_url)) .context("Admin creds should match a peer")?, &api_secret, + &connector, ) } else { - DynGlobalApi::from_endpoints(peer_urls, &api_secret) + DynGlobalApi::from_endpoints(peer_urls, &api_secret, &connector) }; let task_group = TaskGroup::new(); @@ -2639,6 +2655,7 @@ impl ClientBuilder { operation_log: OperationLog::new(db), client_recovery_progress_receiver, meta_service: self.meta_service, + connector, }); client_inner .task_group diff --git a/fedimint-load-test-tool/src/common.rs b/fedimint-load-test-tool/src/common.rs index 05cbae7bf86..cd550b7db6d 100644 --- a/fedimint-load-test-tool/src/common.rs +++ b/fedimint-load-test-tool/src/common.rs @@ -155,7 +155,11 @@ pub async fn build_client( let client = if Client::is_initialized(client_builder.db_no_decoders()).await { client_builder.open(root_secret).await } else if let Some(invite_code) = &invite_code { - let client_config = fedimint_api_client::download_from_invite_code(invite_code).await?; + let client_config = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + invite_code, + ) + .await?; client_builder .join(root_secret, client_config.clone(), invite_code.api_secret()) .await diff --git a/fedimint-load-test-tool/src/main.rs b/fedimint-load-test-tool/src/main.rs index a8f26b7027d..167f5433397 100644 --- a/fedimint-load-test-tool/src/main.rs +++ b/fedimint-load-test-tool/src/main.rs @@ -1097,7 +1097,11 @@ fn test_download_config( let event_sender = event_sender.clone(); let f: BoxFuture<_> = Box::pin(async move { let m = fedimint_core::time::now(); - let _ = fedimint_api_client::download_from_invite_code(&invite_code).await?; + let _ = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + &invite_code, + ) + .await?; event_sender.send(MetricEvent { name: "download_client_config".into(), duration: m.elapsed()?, @@ -1120,7 +1124,11 @@ async fn test_connect_raw_client( use jsonrpsee_core::client::ClientT; use jsonrpsee_ws_client::WsClientBuilder; - let mut cfg = fedimint_api_client::download_from_invite_code(&invite_code).await?; + let mut cfg = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + &invite_code, + ) + .await?; if let Some(limit_endpoints) = limit_endpoints { cfg.global.api_endpoints = cfg diff --git a/fedimint-server/src/config/mod.rs b/fedimint-server/src/config/mod.rs index f935cf91465..dc9aa5b8bed 100644 --- a/fedimint-server/src/config/mod.rs +++ b/fedimint-server/src/config/mod.rs @@ -135,6 +135,8 @@ pub struct ServerConfigConsensus { pub meta: BTreeMap, } +// FIXME: (@leonardo) Should this have another field for the expected transport +// ? (e.g. clearnet/tor/...) #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ServerConfigLocal { /// Network addresses and names for all p2p connections diff --git a/fedimint-server/src/consensus/mod.rs b/fedimint-server/src/consensus/mod.rs index 602c8de32e8..620723c7358 100644 --- a/fedimint-server/src/consensus/mod.rs +++ b/fedimint-server/src/consensus/mod.rs @@ -15,7 +15,7 @@ use std::time::Duration; use anyhow::bail; use async_channel::Sender; use db::{get_global_database_migrations, GLOBAL_DATABASE_VERSION}; -use fedimint_api_client::api::DynGlobalApi; +use fedimint_api_client::api::{Connector, DynGlobalApi}; use fedimint_core::config::ServerModuleInitRegistry; use fedimint_core::core::{ModuleInstanceId, ModuleKind}; use fedimint_core::db::{apply_migrations, apply_migrations_server, Database}; @@ -154,9 +154,16 @@ pub async fn run( info!(target: LOG_CONSENSUS, "Starting Consensus Engine"); let api_urls = get_api_urls(&db, &cfg.consensus).await; + + // FIXME: (@leonardo) How should this be handled ? + // Using the `Connector::default()` for now! ConsensusEngine { db, - federation_api: DynGlobalApi::from_endpoints(api_urls, &force_api_secrets.get_active()), + federation_api: DynGlobalApi::from_endpoints( + api_urls, + &force_api_secrets.get_active(), + &Connector::default(), + ), self_id_str: cfg.local.identity.to_string(), peer_id_str: (0..cfg.consensus.api_endpoints.len()) .map(|x| x.to_string()) diff --git a/fedimint-server/src/net/api/announcement.rs b/fedimint-server/src/net/api/announcement.rs index d6d76e05f8f..4868fe66af0 100644 --- a/fedimint-server/src/net/api/announcement.rs +++ b/fedimint-server/src/net/api/announcement.rs @@ -2,7 +2,7 @@ use std::collections::BTreeMap; use std::time::Duration; use bitcoin::secp256k1; -use fedimint_api_client::api::DynGlobalApi; +use fedimint_api_client::api::{Connector, DynGlobalApi}; use fedimint_core::db::{Database, IDatabaseTransactionOpsCoreTyped}; use fedimint_core::encoding::{Decodable, Encodable}; use fedimint_core::net::api_announcement::{ @@ -47,8 +47,12 @@ pub async fn start_api_announcement_service( insert_signed_api_announcement_if_not_present(db, cfg).await; let db = db.clone(); - let api_client = - DynGlobalApi::from_endpoints(get_api_urls(&db, &cfg.consensus).await, &api_secret); + // FIXME: (@leonardo) how should we handle the connector here ? + let api_client = DynGlobalApi::from_endpoints( + get_api_urls(&db, &cfg.consensus).await, + &api_secret, + &Connector::default(), + ); let our_peer_id = cfg.local.identity; tg.spawn_cancellable("submit-api-url-announcement", async move { // Give other servers some time to start up in case they were just restarted diff --git a/fedimint-testing/src/federation.rs b/fedimint-testing/src/federation.rs index 02cea67fff2..fe122c34c90 100644 --- a/fedimint-testing/src/federation.rs +++ b/fedimint-testing/src/federation.rs @@ -2,7 +2,7 @@ use std::collections::{BTreeMap, HashMap}; use std::sync::Arc; use std::time::Duration; -use fedimint_api_client::api::{DynGlobalApi, FederationApiExt}; +use fedimint_api_client::api::{Connector, DynGlobalApi, FederationApiExt}; use fedimint_client::module::init::ClientModuleInitRegistry; use fedimint_client::secret::{PlainRootSecretStrategy, RootSecretStrategy}; use fedimint_client::{AdminCreds, Client, ClientHandleArc}; @@ -246,10 +246,13 @@ impl FederationTestBuilder { continue; } + // FIXME: (@leonardo) Currently there is no support for Tor while testing, + // defaulting to Tcp variant. let api = DynGlobalApi::new_admin( peer_id, config.consensus.api_endpoints[&peer_id].url.clone(), &None, + &Connector::default(), ); while let Err(e) = api diff --git a/fedimint-wasm-tests/src/lib.rs b/fedimint-wasm-tests/src/lib.rs index 8ca07255fdc..7ad2e48ed08 100644 --- a/fedimint-wasm-tests/src/lib.rs +++ b/fedimint-wasm-tests/src/lib.rs @@ -37,7 +37,11 @@ async fn make_client_builder() -> Result { } async fn client(invite_code: &InviteCode) -> Result { - let client_config = fedimint_api_client::download_from_invite_code(invite_code).await?; + let client_config = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + invite_code, + ) + .await?; let mut builder = make_client_builder().await?; let client_secret = load_or_generate_mnemonic(builder.db_no_decoders()).await?; builder.stopped(); diff --git a/gateway/ln-gateway/src/client.rs b/gateway/ln-gateway/src/client.rs index 25fd88576a2..6186d72dd35 100644 --- a/gateway/ln-gateway/src/client.rs +++ b/gateway/ln-gateway/src/client.rs @@ -91,8 +91,11 @@ impl GatewayClientBuilder { .open(root_secret) .await } else { - let client_config = - fedimint_api_client::download_from_invite_code(&invite_code).await?; + let client_config = fedimint_api_client::download_from_invite_code( + fedimint_api_client::api::Connector::default(), + &invite_code, + ) + .await?; client_builder // TODO: make this configurable? .join(root_secret, client_config.clone(), invite_code.api_secret()) diff --git a/misc/git-hooks/pre-commit b/misc/git-hooks/pre-commit index 0bdc160d832..2a1971fc1bc 100755 --- a/misc/git-hooks/pre-commit +++ b/misc/git-hooks/pre-commit @@ -87,6 +87,7 @@ function check_check_forbidden_dependencies() { return 1 fi done + # FIXME: (@leonardo) temporally allow the `openssl`, it's currently being brought by tor-proto -...-> native-tls. find ./ -name Cargo.lock | while read -r cargo_lock ; do if grep -E "openssl" "$cargo_lock" >&2 ; then >&2 echo "$cargo_lock must not depend on openssl" diff --git a/nix/flakebox.nix b/nix/flakebox.nix index 87067f20da8..e1b0611cd16 100644 --- a/nix/flakebox.nix +++ b/nix/flakebox.nix @@ -131,6 +131,7 @@ let openssl pkg-config protobuf + sqlite ] ++ lib.optionals (!stdenv.isDarwin) [ util-linux iproute2 From 2dfdd868354d6f159e341d7419a29fc334827019 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Tue, 25 Jun 2024 13:25:23 -0300 Subject: [PATCH 03/18] refactor(api)!: split error, rename globalapi and peer modules --- fedimint-api-client/src/api/error.rs | 190 +++++++++++++ ...ration_api_with_cache.rs => global_api.rs} | 0 fedimint-api-client/src/api/mod.rs | 268 +++--------------- .../{federation_peer_client.rs => peer.rs} | 0 4 files changed, 227 insertions(+), 231 deletions(-) create mode 100644 fedimint-api-client/src/api/error.rs rename fedimint-api-client/src/api/{global_federation_api_with_cache.rs => global_api.rs} (100%) rename fedimint-api-client/src/api/{federation_peer_client.rs => peer.rs} (100%) diff --git a/fedimint-api-client/src/api/error.rs b/fedimint-api-client/src/api/error.rs new file mode 100644 index 00000000000..04e7c297efb --- /dev/null +++ b/fedimint-api-client/src/api/error.rs @@ -0,0 +1,190 @@ +use std::collections::BTreeMap; +use std::fmt::{self, Debug, Display}; +use std::time::Duration; + +use fedimint_core::fmt_utils::AbbreviateJson; +use fedimint_core::PeerId; +use fedimint_logging::LOG_CLIENT_NET_API; +use jsonrpsee_core::client::Error as JsonRpcClientError; +#[cfg(target_family = "wasm")] +use jsonrpsee_wasm_client::{Client as WsClient, WasmClientBuilder as WsClientBuilder}; +use serde::Serialize; +use thiserror::Error; +use tracing::{error, trace, warn}; + +/// An API request error when calling a single federation peer +#[derive(Debug, Error)] +pub enum PeerError { + #[error("Response deserialization error: {0}")] + ResponseDeserialization(anyhow::Error), + #[error("Invalid peer id: {peer_id}")] + InvalidPeerId { peer_id: PeerId }, + #[error("Rpc error: {0}")] + Rpc(#[from] JsonRpcClientError), + #[error("Invalid response: {0}")] + InvalidResponse(String), +} + +impl PeerError { + /// Report errors that are worth reporting + /// + /// The goal here is to avoid spamming logs with errors that happen commonly + /// for all sorts of expected reasons, while printing ones that suggest + /// there's a problem. + pub fn report_if_important(&self, peer_id: PeerId) { + let important = match self { + PeerError::ResponseDeserialization(_) + | PeerError::InvalidPeerId { .. } + | PeerError::InvalidResponse(_) => true, + PeerError::Rpc(rpc_e) => match rpc_e { + // TODO: Does this cover all retryable cases? + JsonRpcClientError::Transport(_) | JsonRpcClientError::RequestTimeout => false, + JsonRpcClientError::RestartNeeded(_) + | JsonRpcClientError::Call(_) + | JsonRpcClientError::ParseError(_) + | JsonRpcClientError::InvalidSubscriptionId + | JsonRpcClientError::InvalidRequestId(_) + | JsonRpcClientError::Custom(_) + | JsonRpcClientError::HttpNotImplemented + | JsonRpcClientError::EmptyBatchRequest(_) + | JsonRpcClientError::RegisterMethod(_) => true, + }, + }; + + trace!(target: LOG_CLIENT_NET_API, error = %self, "PeerError"); + + if important { + warn!(target: LOG_CLIENT_NET_API, error = %self, %peer_id, "Unusual PeerError"); + } + } +} + +/// An API request error when calling an entire federation +/// +/// Generally all Federation errors are retryable. +#[derive(Debug, Error)] +pub struct FederationError { + pub method: String, + pub params: serde_json::Value, + pub general: Option, + pub peers: BTreeMap, +} + +impl Display for FederationError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str("Federation rpc error {")?; + if let Some(general) = self.general.as_ref() { + f.write_fmt(format_args!("method => {}), ", self.method))?; + f.write_fmt(format_args!( + "params => {:?}), ", + AbbreviateJson(&self.params) + ))?; + f.write_fmt(format_args!("general => {general})"))?; + if !self.peers.is_empty() { + f.write_str(", ")?; + } + } + for (i, (peer, e)) in self.peers.iter().enumerate() { + f.write_fmt(format_args!("{peer} => {e})"))?; + if i == self.peers.len() - 1 { + f.write_str(", ")?; + } + } + f.write_str("}")?; + Ok(()) + } +} + +impl FederationError { + pub fn general( + method: impl Into, + params: impl Serialize, + e: impl Into, + ) -> FederationError { + FederationError { + method: method.into(), + params: serde_json::to_value(params).unwrap_or_default(), + general: Some(e.into()), + peers: BTreeMap::default(), + } + } + + pub fn new_one_peer( + peer_id: PeerId, + method: impl Into, + params: impl Serialize, + error: PeerError, + ) -> Self { + Self { + method: method.into(), + params: serde_json::to_value(params).expect("Serialization of valid params won't fail"), + general: None, + peers: [(peer_id, error)].into_iter().collect(), + } + } + + /// Report any errors + pub fn report_if_important(&self) { + if let Some(error) = self.general.as_ref() { + warn!(target: LOG_CLIENT_NET_API, %error, "General FederationError"); + } + for (peer_id, e) in &self.peers { + e.report_if_important(*peer_id); + } + } + + /// Get the general error if any. + pub fn get_general_error(&self) -> Option<&anyhow::Error> { + self.general.as_ref() + } + + /// Get errors from different peers. + pub fn get_peer_errors(&self) -> impl Iterator { + self.peers.iter().map(|(peer, error)| (*peer, error)) + } +} + +#[derive(Debug, Error)] +pub enum OutputOutcomeError { + #[error("Response deserialization error: {0}")] + ResponseDeserialization(anyhow::Error), + #[error("Federation error: {0}")] + Federation(#[from] FederationError), + #[error("Core error: {0}")] + Core(#[from] anyhow::Error), + #[error("Transaction rejected: {0}")] + Rejected(String), + #[error("Invalid output index {out_idx}, larger than {outputs_num} in the transaction")] + InvalidVout { out_idx: u64, outputs_num: usize }, + #[error("Timeout reached after waiting {}s", .0.as_secs())] + Timeout(Duration), +} + +impl OutputOutcomeError { + pub fn report_if_important(&self) { + let important = match self { + OutputOutcomeError::Federation(e) => { + e.report_if_important(); + return; + } + OutputOutcomeError::Core(_) + | OutputOutcomeError::InvalidVout { .. } + | OutputOutcomeError::ResponseDeserialization(_) => true, + OutputOutcomeError::Rejected(_) | OutputOutcomeError::Timeout(_) => false, + }; + + trace!(target: LOG_CLIENT_NET_API, error = %self, "OutputOutcomeError"); + + if important { + warn!(target: LOG_CLIENT_NET_API, error = %self, "Uncommon OutputOutcomeError"); + } + } + + /// Was the transaction rejected (which is final) + pub fn is_rejected(&self) -> bool { + matches!( + self, + OutputOutcomeError::Rejected(_) | OutputOutcomeError::InvalidVout { .. } + ) + } +} diff --git a/fedimint-api-client/src/api/global_federation_api_with_cache.rs b/fedimint-api-client/src/api/global_api.rs similarity index 100% rename from fedimint-api-client/src/api/global_federation_api_with_cache.rs rename to fedimint-api-client/src/api/global_api.rs diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index 11d0e6551cd..f1ec9fc40f8 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -1,5 +1,5 @@ use std::collections::{BTreeMap, BTreeSet, HashMap}; -use std::fmt::{self, Debug, Display}; +use std::fmt::{self, Debug}; use std::pin::Pin; use std::str::FromStr; use std::sync::Arc; @@ -12,6 +12,7 @@ use arti_client::{TorAddr, TorClient, TorClientConfig}; use base64::Engine as _; use bitcoin::hashes::sha256; use bitcoin::secp256k1; +pub use error::{FederationError, OutputOutcomeError, PeerError}; use fedimint_core::admin_client::{ ConfigGenConnectionsRequest, ConfigGenParamsRequest, ConfigGenParamsResponse, PeerServerParams, ServerStatus, @@ -21,11 +22,12 @@ use fedimint_core::core::backup::SignedBackupRequest; use fedimint_core::core::{Decoder, DynOutputOutcome, ModuleInstanceId, OutputOutcome}; use fedimint_core::encoding::{Decodable, Encodable}; use fedimint_core::endpoint_constants::AWAIT_OUTPUT_OUTCOME_ENDPOINT; -use fedimint_core::fmt_utils::{AbbreviateDebug, AbbreviateJson}; +use fedimint_core::fmt_utils::AbbreviateDebug; use fedimint_core::invite_code::InviteCode; use fedimint_core::module::audit::AuditSummary; use fedimint_core::module::registry::ModuleDecoderRegistry; use fedimint_core::module::{ApiAuth, ApiRequestErased, ApiVersion, SerdeModuleEncoding}; +use fedimint_core::net::api_announcement::SignedApiAnnouncement; use fedimint_core::session_outcome::{SessionOutcome, SessionStatus}; use fedimint_core::task::{MaybeSend, MaybeSync}; use fedimint_core::transaction::{Transaction, TransactionSubmissionOutcome}; @@ -48,204 +50,65 @@ use jsonrpsee_ws_client::{CustomCertStore, HeaderMap, HeaderValue}; use jsonrpsee_ws_client::{WsClient, WsClientBuilder}; use serde::{Deserialize, Serialize}; use serde_json::Value; -use thiserror::Error; #[cfg(not(target_family = "wasm"))] use tokio_rustls::rustls::{ClientConfig as TlsClientConfig, RootCertStore}; #[cfg(not(target_family = "wasm"))] use tokio_rustls::TlsConnector; -use tracing::{debug, error, instrument, trace, warn}; +use tracing::{debug, instrument, trace}; use crate::query::{QueryStep, QueryStrategy, ThresholdConsensus}; -mod federation_peer_client; -mod global_federation_api_with_cache; +mod error; +mod global_api; +mod peer; -use federation_peer_client::FederationPeer; -use fedimint_core::net::api_announcement::SignedApiAnnouncement; -use global_federation_api_with_cache::GlobalFederationApiWithCache; +use global_api::GlobalFederationApiWithCache; +use peer::FederationPeer; pub type PeerResult = Result; pub type JsonRpcResult = Result; pub type FederationResult = Result; pub type SerdeOutputOutcome = SerdeModuleEncoding; -/// An API request error when calling a single federation peer -#[derive(Debug, Error)] -pub enum PeerError { - #[error("Response deserialization error: {0}")] - ResponseDeserialization(anyhow::Error), - #[error("Invalid peer id: {peer_id}")] - InvalidPeerId { peer_id: PeerId }, - #[error("Rpc error: {0}")] - Rpc(#[from] JsonRpcClientError), - #[error("Invalid response: {0}")] - InvalidResponse(String), -} - -impl PeerError { - /// Report errors that are worth reporting - /// - /// The goal here is to avoid spamming logs with errors that happen commonly - /// for all sorts of expected reasons, while printing ones that suggest - /// there's a problem. - pub fn report_if_important(&self, peer_id: PeerId) { - let important = match self { - PeerError::ResponseDeserialization(_) - | PeerError::InvalidPeerId { .. } - | PeerError::InvalidResponse(_) => true, - PeerError::Rpc(rpc_e) => match rpc_e { - // TODO: Does this cover all retryable cases? - JsonRpcClientError::Transport(_) | JsonRpcClientError::RequestTimeout => false, - JsonRpcClientError::RestartNeeded(_) - | JsonRpcClientError::Call(_) - | JsonRpcClientError::ParseError(_) - | JsonRpcClientError::InvalidSubscriptionId - | JsonRpcClientError::InvalidRequestId(_) - | JsonRpcClientError::Custom(_) - | JsonRpcClientError::HttpNotImplemented - | JsonRpcClientError::EmptyBatchRequest(_) - | JsonRpcClientError::RegisterMethod(_) => true, - }, - }; - - trace!(target: LOG_CLIENT_NET_API, error = %self, "PeerError"); +pub type OutputOutcomeResult = result::Result; - if important { - warn!(target: LOG_CLIENT_NET_API, error = %self, %peer_id, "Unusual PeerError"); - } - } -} - -/// An API request error when calling an entire federation +/// Set of api versions for each component (core + modules) /// -/// Generally all Federation errors are retryable. -#[derive(Debug, Error)] -pub struct FederationError { - method: String, - params: serde_json::Value, - general: Option, - peers: BTreeMap, +/// E.g. result of federated common api versions discovery. +#[derive(Debug, Clone, Serialize, Deserialize, Encodable, Decodable)] +pub struct ApiVersionSet { + pub core: ApiVersion, + pub modules: BTreeMap, } -impl Display for FederationError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str("Federation rpc error {")?; - if let Some(general) = self.general.as_ref() { - f.write_fmt(format_args!("method => {}), ", self.method))?; - f.write_fmt(format_args!( - "params => {:?}), ", - AbbreviateJson(&self.params) - ))?; - f.write_fmt(format_args!("general => {general})"))?; - if !self.peers.is_empty() { - f.write_str(", ")?; - } - } - for (i, (peer, e)) in self.peers.iter().enumerate() { - f.write_fmt(format_args!("{peer} => {e})"))?; - if i == self.peers.len() - 1 { - f.write_str(", ")?; - } - } - f.write_str("}")?; - Ok(()) - } +#[derive(Clone, Copy, Debug)] +pub enum Connector { + Tcp, + Tor, } -impl FederationError { - pub fn general( - method: impl Into, - params: impl Serialize, - e: impl Into, - ) -> FederationError { - FederationError { - method: method.into(), - params: serde_json::to_value(params).unwrap_or_default(), - general: Some(e.into()), - peers: BTreeMap::default(), - } - } - - pub fn new_one_peer( - peer_id: PeerId, - method: impl Into, - params: impl Serialize, - error: PeerError, - ) -> Self { - Self { - method: method.into(), - params: serde_json::to_value(params).expect("Serialization of valid params won't fail"), - general: None, - peers: [(peer_id, error)].into_iter().collect(), - } - } - - /// Report any errors - pub fn report_if_important(&self) { - if let Some(error) = self.general.as_ref() { - warn!(target: LOG_CLIENT_NET_API, %error, "General FederationError"); - } - for (peer_id, e) in &self.peers { - e.report_if_important(*peer_id); - } - } - - /// Get the general error if any. - pub fn get_general_error(&self) -> Option<&anyhow::Error> { - self.general.as_ref() - } - - /// Get errors from different peers. - pub fn get_peer_errors(&self) -> impl Iterator { - self.peers.iter().map(|(peer, error)| (*peer, error)) +impl Default for Connector { + fn default() -> Self { + Self::Tcp } } -type OutputOutcomeResult = result::Result; - -#[derive(Debug, Error)] -pub enum OutputOutcomeError { - #[error("Response deserialization error: {0}")] - ResponseDeserialization(anyhow::Error), - #[error("Federation error: {0}")] - Federation(#[from] FederationError), - #[error("Core error: {0}")] - Core(#[from] anyhow::Error), - #[error("Transaction rejected: {0}")] - Rejected(String), - #[error("Invalid output index {out_idx}, larger than {outputs_num} in the transaction")] - InvalidVout { out_idx: u64, outputs_num: usize }, - #[error("Timeout reached after waiting {}s", .0.as_secs())] - Timeout(Duration), +impl fmt::Display for Connector { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{self:?}") + } } -impl OutputOutcomeError { - pub fn report_if_important(&self) { - let important = match self { - OutputOutcomeError::Federation(e) => { - e.report_if_important(); - return; - } - OutputOutcomeError::Core(_) - | OutputOutcomeError::InvalidVout { .. } - | OutputOutcomeError::ResponseDeserialization(_) => true, - OutputOutcomeError::Rejected(_) | OutputOutcomeError::Timeout(_) => false, - }; - - trace!(target: LOG_CLIENT_NET_API, error = %self, "OutputOutcomeError"); +impl FromStr for Connector { + type Err = &'static str; - if important { - warn!(target: LOG_CLIENT_NET_API, error = %self, "Uncommon OutputOutcomeError"); + fn from_str(s: &str) -> Result { + match s { + "Tcp" => Ok(Connector::Tcp), + "Tor" => Ok(Connector::Tor), + _ => Err("invalid connector!"), } } - - /// Was the transaction rejected (which is final) - pub fn is_rejected(&self) -> bool { - matches!( - self, - OutputOutcomeError::Rejected(_) | OutputOutcomeError::InvalidVout { .. } - ) - } } /// An API (module or global) that can query a federation @@ -277,15 +140,6 @@ pub trait IRawFederationApi: Debug + MaybeSend + MaybeSync { ) -> result::Result; } -/// Set of api versions for each component (core + modules) -/// -/// E.g. result of federated common api versions discovery. -#[derive(Debug, Clone, Serialize, Deserialize, Encodable, Decodable)] -pub struct ApiVersionSet { - pub core: ApiVersion, - pub modules: BTreeMap, -} - /// An extension trait allowing to making federation-wide API call on top /// [`IRawFederationApi`]. #[apply(async_trait_maybe_send!)] @@ -350,7 +204,7 @@ pub trait FederationApiExt: IRawFederationApi { .and_then(|v| { serde_json::from_value(v).map_err(|e| PeerError::ResponseDeserialization(e.into())) }) - .map_err(|e| FederationError::new_one_peer(peer_id, method, params, e))?) + .map_err(|e| error::FederationError::new_one_peer(peer_id, method, params, e))?) } /// Make an aggregate request to federation, using `strategy` to logically @@ -623,55 +477,6 @@ impl DynGlobalApi { } } -#[derive(Clone, Copy, Debug)] -pub enum Connector { - Tcp, - Tor, -} - -impl Default for Connector { - fn default() -> Self { - Self::Tcp - } -} - -#[allow(dead_code)] -impl Connector { - /// Returns `true` if the connector is [`Tcp`]. - /// - /// [`Tcp`]: Connector::Tcp - #[must_use] - fn is_tcp(self) -> bool { - matches!(self, Self::Tcp) - } - - /// Returns `true` if the connector is [`Tor`]. - /// - /// [`Tor`]: Connector::Tor - #[must_use] - fn is_tor(self) -> bool { - matches!(self, Self::Tor) - } -} - -impl fmt::Display for Connector { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{self:?}") - } -} - -impl FromStr for Connector { - type Err = &'static str; - - fn from_str(s: &str) -> Result { - match s { - "Tcp" => Ok(Connector::Tcp), - "Tor" => Ok(Connector::Tor), - _ => Err("invalid connector!"), - } - } -} - /// The API for the global (non-module) endpoints #[apply(async_trait_maybe_send!)] pub trait IGlobalFederationApi: IRawFederationApi { @@ -1197,6 +1002,7 @@ where } impl WsFederationApi {} + /// The status of a server, including how it views its peers #[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)] pub struct FederationStatus { diff --git a/fedimint-api-client/src/api/federation_peer_client.rs b/fedimint-api-client/src/api/peer.rs similarity index 100% rename from fedimint-api-client/src/api/federation_peer_client.rs rename to fedimint-api-client/src/api/peer.rs From ffeae85a917c34934f108f34f921c5cc57f8066e Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Tue, 25 Jun 2024 14:13:26 -0300 Subject: [PATCH 04/18] refactor(api)!: move `Connector` enum to `net` mod - refactor the implementation of methods `fedimint-api-client::api::download_from_invite_code` and `try_download_client_config` for `Connector` enum instead. - add usage of the methods implemented for `Connector` to reduce the use/pass of `connector` parameter all around. --- fedimint-api-client/src/api/mod.rs | 36 +----- fedimint-api-client/src/api/net.rs | 32 ++++++ fedimint-api-client/src/api/peer.rs | 3 +- fedimint-api-client/src/lib.rs | 118 ++++++++++---------- fedimint-cli/src/lib.rs | 23 ++-- fedimint-cli/src/utils.rs | 2 +- fedimint-client/src/lib.rs | 5 +- fedimint-load-test-tool/src/common.rs | 8 +- fedimint-load-test-tool/src/main.rs | 16 +-- fedimint-server/src/consensus/mod.rs | 3 +- fedimint-server/src/net/api/announcement.rs | 3 +- fedimint-testing/src/federation.rs | 3 +- fedimint-wasm-tests/src/lib.rs | 8 +- gateway/ln-gateway/src/client.rs | 8 +- 14 files changed, 133 insertions(+), 135 deletions(-) create mode 100644 fedimint-api-client/src/api/net.rs diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index f1ec9fc40f8..ce485690830 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -1,7 +1,6 @@ use std::collections::{BTreeMap, BTreeSet, HashMap}; -use std::fmt::{self, Debug}; +use std::fmt::Debug; use std::pin::Pin; -use std::str::FromStr; use std::sync::Arc; use std::time::Duration; use std::{cmp, result}; @@ -48,6 +47,7 @@ use jsonrpsee_wasm_client::{Client as WsClient, WasmClientBuilder as WsClientBui use jsonrpsee_ws_client::{CustomCertStore, HeaderMap, HeaderValue}; #[cfg(not(target_family = "wasm"))] use jsonrpsee_ws_client::{WsClient, WsClientBuilder}; +use net::Connector; use serde::{Deserialize, Serialize}; use serde_json::Value; #[cfg(not(target_family = "wasm"))] @@ -60,6 +60,7 @@ use crate::query::{QueryStep, QueryStrategy, ThresholdConsensus}; mod error; mod global_api; +pub mod net; mod peer; use global_api::GlobalFederationApiWithCache; @@ -81,36 +82,6 @@ pub struct ApiVersionSet { pub modules: BTreeMap, } -#[derive(Clone, Copy, Debug)] -pub enum Connector { - Tcp, - Tor, -} - -impl Default for Connector { - fn default() -> Self { - Self::Tcp - } -} - -impl fmt::Display for Connector { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{self:?}") - } -} - -impl FromStr for Connector { - type Err = &'static str; - - fn from_str(s: &str) -> Result { - match s { - "Tcp" => Ok(Connector::Tcp), - "Tor" => Ok(Connector::Tor), - _ => Err("invalid connector!"), - } - } -} - /// An API (module or global) that can query a federation #[apply(async_trait_maybe_send!)] pub trait IRawFederationApi: Debug + MaybeSend + MaybeSync { @@ -1049,6 +1020,7 @@ pub struct GuardianConfigBackup { #[cfg(test)] mod tests { + use std::fmt; use std::str::FromStr as _; use fedimint_core::config::FederationId; diff --git a/fedimint-api-client/src/api/net.rs b/fedimint-api-client/src/api/net.rs new file mode 100644 index 00000000000..63c7a9e3154 --- /dev/null +++ b/fedimint-api-client/src/api/net.rs @@ -0,0 +1,32 @@ +use std::fmt; +use std::str::FromStr; + +#[derive(Clone, Copy, Debug)] +pub enum Connector { + Tcp, + Tor, +} + +impl Default for Connector { + fn default() -> Self { + Self::Tcp + } +} + +impl fmt::Display for Connector { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{self:?}") + } +} + +impl FromStr for Connector { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + match s { + "Tcp" => Ok(Connector::Tcp), + "Tor" => Ok(Connector::Tor), + _ => Err("invalid connector!"), + } + } +} diff --git a/fedimint-api-client/src/api/peer.rs b/fedimint-api-client/src/api/peer.rs index 906b4891119..e2b9749d794 100644 --- a/fedimint-api-client/src/api/peer.rs +++ b/fedimint-api-client/src/api/peer.rs @@ -9,7 +9,8 @@ use fedimint_logging::LOG_CLIENT_NET_API; use tokio::sync::{Mutex, RwLock}; use tracing::debug; -use super::{Connector, JsonRpcClient}; +use super::net::Connector; +use super::JsonRpcClient; // TODO(tvolk131): Merge this with `FederationPeerClient`. #[derive(Debug)] diff --git a/fedimint-api-client/src/lib.rs b/fedimint-api-client/src/lib.rs index 3c238c00abd..90343e9beaf 100644 --- a/fedimint-api-client/src/lib.rs +++ b/fedimint-api-client/src/lib.rs @@ -6,7 +6,8 @@ #![allow(clippy::return_self_not_must_use)] use anyhow::{bail, Context as _}; -use api::{Connector, DynGlobalApi, FederationApiExt as _, WsFederationApi}; +use api::net::Connector; +use api::{DynGlobalApi, FederationApiExt as _, WsFederationApi}; use fedimint_core::config::{ClientConfig, FederationId}; use fedimint_core::endpoint_constants::CLIENT_CONFIG_ENDPOINT; use fedimint_core::invite_code::InviteCode; @@ -20,71 +21,72 @@ pub mod api; /// Client query system pub mod query; -// FIXME: (@leonardo) how should this fns handle different [`Connector`]'s +impl Connector { + /// Tries to download the [`ClientConfig`] from the federation with an + /// specified [`Connector`] variant, attempts to retry ten times before + /// giving up. + pub async fn download_from_invite_code( + &self, + invite_code: &InviteCode, + ) -> anyhow::Result { + debug!("Downloading client config from {:?}", invite_code); -/// Tries to download the [`ClientConfig`] from the federation, -/// attempts to retry ten times before giving up. -pub async fn download_from_invite_code( - connector: Connector, - invite_code: &InviteCode, -) -> anyhow::Result { - debug!("Downloading client config from {:?}", invite_code); + let federation_id = invite_code.federation_id(); + // FIXME: (@leonardo) should fetch all the api_endpoints with proper + // [`Connector`] too! + let api = DynGlobalApi::from_invite_code(invite_code); + let api_secret = invite_code.api_secret(); - let federation_id = invite_code.federation_id(); - // FIXME: (@leonardo) should fetch all the api_endpoints with proper - // [`Connector`] too! - let api = DynGlobalApi::from_invite_code(invite_code); - let api_secret = invite_code.api_secret(); + fedimint_core::util::retry( + "Downloading client config", + backoff_util::aggressive_backoff(), + || self.try_download_client_config(&api, federation_id, api_secret.clone()), + ) + .await + .context("Failed to download client config") + } - fedimint_core::util::retry( - "Downloading client config", - backoff_util::aggressive_backoff(), - || try_download_client_config(&api, connector, federation_id, api_secret.clone()), - ) - .await - .context("Failed to download client config") -} + /// Tries to download the [`ClientConfig`] only once. + pub async fn try_download_client_config( + &self, + api: &DynGlobalApi, + federation_id: FederationId, + api_secret: Option, + ) -> anyhow::Result { + // TODO: use new download approach based on guardian PKs + let query_strategy = FilterMap::new( + move |cfg: ClientConfig| { + if federation_id != cfg.global.calculate_federation_id() { + bail!("FederationId in invite code does not match client config") + } -/// Tries to download the client config only once. -pub async fn try_download_client_config( - api: &DynGlobalApi, - connector: Connector, - federation_id: FederationId, - api_secret: Option, -) -> anyhow::Result { - // TODO: use new download approach based on guardian PKs - let query_strategy = FilterMap::new( - move |cfg: ClientConfig| { - if federation_id != cfg.global.calculate_federation_id() { - bail!("FederationId in invite code does not match client config") - } + Ok(cfg.global.api_endpoints) + }, + NumPeers::from(1), + ); - Ok(cfg.global.api_endpoints) - }, - NumPeers::from(1), - ); + let api_endpoints = api + .request_with_strategy( + query_strategy, + CLIENT_CONFIG_ENDPOINT.to_owned(), + ApiRequestErased::default(), + ) + .await?; - let api_endpoints = api - .request_with_strategy( - query_strategy, - CLIENT_CONFIG_ENDPOINT.to_owned(), - ApiRequestErased::default(), - ) - .await?; + // now we can build an api for all guardians and download the client config + let api_endpoints = api_endpoints.into_iter().map(|(peer, url)| (peer, url.url)); - // now we can build an api for all guardians and download the client config - let api_endpoints = api_endpoints.into_iter().map(|(peer, url)| (peer, url.url)); + let client_config = WsFederationApi::new(self, api_endpoints, &api_secret) + .request_current_consensus::( + CLIENT_CONFIG_ENDPOINT.to_owned(), + ApiRequestErased::default(), + ) + .await?; - let client_config = WsFederationApi::new(&connector, api_endpoints, &api_secret) - .request_current_consensus::( - CLIENT_CONFIG_ENDPOINT.to_owned(), - ApiRequestErased::default(), - ) - .await?; + if client_config.calculate_federation_id() != federation_id { + bail!("Obtained client config has different federation id"); + } - if client_config.calculate_federation_id() != federation_id { - bail!("Obtained client config has different federation id"); + Ok(client_config) } - - Ok(client_config) } diff --git a/fedimint-cli/src/lib.rs b/fedimint-cli/src/lib.rs index 636a2bcaa18..3e8cbd9f62e 100644 --- a/fedimint-cli/src/lib.rs +++ b/fedimint-cli/src/lib.rs @@ -29,8 +29,9 @@ use clap::{Args, CommandFactory, Parser, Subcommand}; use db_locked::LockedBuilder; use envs::{FM_API_SECRET_ENV, FM_CONNECTOR_ENV, SALT_FILE}; use fedimint_aead::{encrypted_read, encrypted_write, get_encryption_key}; +use fedimint_api_client::api::net::Connector; use fedimint_api_client::api::{ - Connector, DynGlobalApi, FederationApiExt, FederationError, IRawFederationApi, WsFederationApi, + DynGlobalApi, FederationApiExt, FederationError, IRawFederationApi, WsFederationApi, }; use fedimint_bip39::Bip39RootSecretStrategy; use fedimint_client::meta::{FetchKind, MetaSource}; @@ -628,12 +629,10 @@ impl FedimintCli { cli: &Opts, invite_code: InviteCode, ) -> CliResult { - let client_config = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - &invite_code, - ) - .await - .map_err_cli()?; + let client_config = Connector::default() + .download_from_invite_code(&invite_code) + .await + .map_err_cli()?; let client_builder = self.make_client_builder(cli).await?; @@ -692,12 +691,10 @@ impl FedimintCli { ) -> CliResult { let builder = self.make_client_builder(cli).await?; - let client_config = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - &invite_code, - ) - .await - .map_err_cli()?; + let client_config = fedimint_api_client::api::net::Connector::default() + .download_from_invite_code(&invite_code) + .await + .map_err_cli()?; match Client::load_decodable_client_secret_opt::>(builder.db_no_decoders()) .await diff --git a/fedimint-cli/src/utils.rs b/fedimint-cli/src/utils.rs index 6880311ecbf..eec7064b56a 100644 --- a/fedimint-cli/src/utils.rs +++ b/fedimint-cli/src/utils.rs @@ -1,6 +1,6 @@ use std::num::ParseIntError; -use fedimint_api_client::api::Connector; +use fedimint_api_client::api::net::Connector; use fedimint_core::PeerId; pub fn parse_peer_id(s: &str) -> Result { diff --git a/fedimint-client/src/lib.rs b/fedimint-client/src/lib.rs index 87f7cb124ea..a3676836310 100644 --- a/fedimint-client/src/lib.rs +++ b/fedimint-client/src/lib.rs @@ -97,8 +97,9 @@ use db::{ ClientModuleRecovery, ClientPreRootSecretHashKey, EncodedClientSecretKey, InitMode, PeerLastApiVersionsSummary, PeerLastApiVersionsSummaryKey, CORE_CLIENT_DATABASE_VERSION, }; +use fedimint_api_client::api::net::Connector; use fedimint_api_client::api::{ - ApiVersionSet, Connector, DynGlobalApi, DynModuleApi, FederationApiExt, IGlobalFederationApi, + ApiVersionSet, DynGlobalApi, DynModuleApi, FederationApiExt, IGlobalFederationApi, }; use fedimint_core::config::{ ClientConfig, FederationId, GlobalClientConfig, JsonClientConfig, ModuleInitRegistry, @@ -2235,7 +2236,7 @@ impl ClientBuilder { /// // Get invite code from user /// let invite_code = InviteCode::from_str("fed11qgqpw9thwvaz7te3xgmjuvpwxqhrzw3jxumrvvf0qqqjpetvlg8glnpvzcufhffgzhv8m75f7y34ryk7suamh8x7zetly8h0v9v0rm") /// .expect("Invalid invite code"); - /// let config = fedimint_api_client::download_from_invite_code(fedimint_api_client::api::Connector::default(), &invite_code).await + /// let config = fedimint_api_client::api::net::Connector::default().download_from_invite_code(&invite_code).await /// .expect("Error downloading config"); /// /// // Tell the user the federation name, bitcoin network diff --git a/fedimint-load-test-tool/src/common.rs b/fedimint-load-test-tool/src/common.rs index cd550b7db6d..18157013aa5 100644 --- a/fedimint-load-test-tool/src/common.rs +++ b/fedimint-load-test-tool/src/common.rs @@ -155,11 +155,9 @@ pub async fn build_client( let client = if Client::is_initialized(client_builder.db_no_decoders()).await { client_builder.open(root_secret).await } else if let Some(invite_code) = &invite_code { - let client_config = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - invite_code, - ) - .await?; + let client_config = fedimint_api_client::api::net::Connector::default() + .download_from_invite_code(invite_code) + .await?; client_builder .join(root_secret, client_config.clone(), invite_code.api_secret()) .await diff --git a/fedimint-load-test-tool/src/main.rs b/fedimint-load-test-tool/src/main.rs index 167f5433397..0b6403433cb 100644 --- a/fedimint-load-test-tool/src/main.rs +++ b/fedimint-load-test-tool/src/main.rs @@ -1097,11 +1097,9 @@ fn test_download_config( let event_sender = event_sender.clone(); let f: BoxFuture<_> = Box::pin(async move { let m = fedimint_core::time::now(); - let _ = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - &invite_code, - ) - .await?; + let _ = fedimint_api_client::api::net::Connector::default() + .download_from_invite_code(&invite_code) + .await?; event_sender.send(MetricEvent { name: "download_client_config".into(), duration: m.elapsed()?, @@ -1124,11 +1122,9 @@ async fn test_connect_raw_client( use jsonrpsee_core::client::ClientT; use jsonrpsee_ws_client::WsClientBuilder; - let mut cfg = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - &invite_code, - ) - .await?; + let mut cfg = fedimint_api_client::api::net::Connector::default() + .download_from_invite_code(&invite_code) + .await?; if let Some(limit_endpoints) = limit_endpoints { cfg.global.api_endpoints = cfg diff --git a/fedimint-server/src/consensus/mod.rs b/fedimint-server/src/consensus/mod.rs index 620723c7358..51bbc8126ab 100644 --- a/fedimint-server/src/consensus/mod.rs +++ b/fedimint-server/src/consensus/mod.rs @@ -15,7 +15,8 @@ use std::time::Duration; use anyhow::bail; use async_channel::Sender; use db::{get_global_database_migrations, GLOBAL_DATABASE_VERSION}; -use fedimint_api_client::api::{Connector, DynGlobalApi}; +use fedimint_api_client::api::net::Connector; +use fedimint_api_client::api::DynGlobalApi; use fedimint_core::config::ServerModuleInitRegistry; use fedimint_core::core::{ModuleInstanceId, ModuleKind}; use fedimint_core::db::{apply_migrations, apply_migrations_server, Database}; diff --git a/fedimint-server/src/net/api/announcement.rs b/fedimint-server/src/net/api/announcement.rs index 4868fe66af0..8de3b3c779c 100644 --- a/fedimint-server/src/net/api/announcement.rs +++ b/fedimint-server/src/net/api/announcement.rs @@ -2,7 +2,8 @@ use std::collections::BTreeMap; use std::time::Duration; use bitcoin::secp256k1; -use fedimint_api_client::api::{Connector, DynGlobalApi}; +use fedimint_api_client::api::net::Connector; +use fedimint_api_client::api::DynGlobalApi; use fedimint_core::db::{Database, IDatabaseTransactionOpsCoreTyped}; use fedimint_core::encoding::{Decodable, Encodable}; use fedimint_core::net::api_announcement::{ diff --git a/fedimint-testing/src/federation.rs b/fedimint-testing/src/federation.rs index fe122c34c90..e835465c52c 100644 --- a/fedimint-testing/src/federation.rs +++ b/fedimint-testing/src/federation.rs @@ -2,7 +2,8 @@ use std::collections::{BTreeMap, HashMap}; use std::sync::Arc; use std::time::Duration; -use fedimint_api_client::api::{Connector, DynGlobalApi, FederationApiExt}; +use fedimint_api_client::api::net::Connector; +use fedimint_api_client::api::{DynGlobalApi, FederationApiExt}; use fedimint_client::module::init::ClientModuleInitRegistry; use fedimint_client::secret::{PlainRootSecretStrategy, RootSecretStrategy}; use fedimint_client::{AdminCreds, Client, ClientHandleArc}; diff --git a/fedimint-wasm-tests/src/lib.rs b/fedimint-wasm-tests/src/lib.rs index 7ad2e48ed08..e59a80ddfdc 100644 --- a/fedimint-wasm-tests/src/lib.rs +++ b/fedimint-wasm-tests/src/lib.rs @@ -37,11 +37,9 @@ async fn make_client_builder() -> Result { } async fn client(invite_code: &InviteCode) -> Result { - let client_config = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - invite_code, - ) - .await?; + let client_config = fedimint_api_client::api::net::Connector::default() + .download_from_invite_code(invite_code) + .await?; let mut builder = make_client_builder().await?; let client_secret = load_or_generate_mnemonic(builder.db_no_decoders()).await?; builder.stopped(); diff --git a/gateway/ln-gateway/src/client.rs b/gateway/ln-gateway/src/client.rs index 6186d72dd35..9cb614ba295 100644 --- a/gateway/ln-gateway/src/client.rs +++ b/gateway/ln-gateway/src/client.rs @@ -91,11 +91,9 @@ impl GatewayClientBuilder { .open(root_secret) .await } else { - let client_config = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - &invite_code, - ) - .await?; + let client_config = fedimint_api_client::api::net::Connector::default() + .download_from_invite_code(&invite_code) + .await?; client_builder // TODO: make this configurable? .join(root_secret, client_config.clone(), invite_code.api_secret()) From 2214e96122cc15ff0a46d579e332a916fd38190d Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Tue, 25 Jun 2024 15:27:14 -0300 Subject: [PATCH 05/18] refactor(cli)!: add `--use-tor` argument instead - refactor cli to handle `--use-tor` (or `FM_USE_TOR` environment variable) for specified `Connector` variant, use `Connector::default()` otherwise. --- fedimint-api-client/src/api/net.rs | 6 ++--- fedimint-cli/src/envs.rs | 6 ++--- fedimint-cli/src/lib.rs | 38 +++++++++++++++++++----------- fedimint-cli/src/utils.rs | 5 ---- 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/fedimint-api-client/src/api/net.rs b/fedimint-api-client/src/api/net.rs index 63c7a9e3154..381a29ff343 100644 --- a/fedimint-api-client/src/api/net.rs +++ b/fedimint-api-client/src/api/net.rs @@ -23,9 +23,9 @@ impl FromStr for Connector { type Err = &'static str; fn from_str(s: &str) -> Result { - match s { - "Tcp" => Ok(Connector::Tcp), - "Tor" => Ok(Connector::Tor), + match s.to_lowercase().as_str() { + "tcp" => Ok(Connector::Tcp), + "tor" => Ok(Connector::Tor), _ => Err("invalid connector!"), } } diff --git a/fedimint-cli/src/envs.rs b/fedimint-cli/src/envs.rs index c8410a57e04..1b6147821b9 100644 --- a/fedimint-cli/src/envs.rs +++ b/fedimint-cli/src/envs.rs @@ -5,12 +5,12 @@ pub const FM_CLIENT_DIR_ENV: &str = "FM_CLIENT_DIR"; // Env variable to set the peer id of the guardian pub const FM_OUR_ID_ENV: &str = "FM_OUR_ID"; -// Env variable to set the connector choice (e.g Tcp / Tor) -pub const FM_CONNECTOR_ENV: &str = "FM_CONNECTOR"; - // Env variable to set the guardian password for authentication pub const FM_PASSWORD_ENV: &str = "FM_PASSWORD"; +// Env variable to use Tor connector, instead of default Tcp/ClearNet. +pub const FM_USE_TOR_ENV: &str = "FM_USE_TOR"; + // Api authentication secret pub const FM_API_SECRET_ENV: &str = "FM_API_SECRET"; diff --git a/fedimint-cli/src/lib.rs b/fedimint-cli/src/lib.rs index 3e8cbd9f62e..31f6ef57043 100644 --- a/fedimint-cli/src/lib.rs +++ b/fedimint-cli/src/lib.rs @@ -27,7 +27,7 @@ use anyhow::{format_err, Context}; use bip39::Mnemonic; use clap::{Args, CommandFactory, Parser, Subcommand}; use db_locked::LockedBuilder; -use envs::{FM_API_SECRET_ENV, FM_CONNECTOR_ENV, SALT_FILE}; +use envs::{FM_API_SECRET_ENV, FM_USE_TOR_ENV, SALT_FILE}; use fedimint_aead::{encrypted_read, encrypted_write, get_encryption_key}; use fedimint_api_client::api::net::Connector; use fedimint_api_client::api::{ @@ -62,7 +62,7 @@ use serde::{Deserialize, Serialize}; use serde_json::{json, Value}; use thiserror::Error; use tracing::{debug, info}; -use utils::{parse_connector, parse_peer_id}; +use utils::parse_peer_id; use crate::client::ClientCmd; use crate::envs::{FM_CLIENT_DIR_ENV, FM_OUR_ID_ENV, FM_PASSWORD_ENV}; @@ -211,9 +211,9 @@ struct Opts { #[arg(long, env = FM_PASSWORD_ENV)] password: Option, - /// Connector (e.g. Tcp / Tor) - #[arg(env = FM_CONNECTOR_ENV, value_parser = parse_connector)] - connector: Option, + /// Activate usage of Tor as the Connector when building the Client + #[arg(long, env = FM_USE_TOR_ENV)] + use_tor: bool, /// Activate more verbose logging, for full control use the RUST_LOG env /// variable @@ -240,17 +240,14 @@ impl Opts { Ok(dir) } - // FIXME: (@leonardo) How should the connector selection should be handled here - // ? fn admin_client( &self, peer_urls: &BTreeMap, api_secret: &Option, ) -> CliResult { let our_id = self.our_id.ok_or_cli_msg("Admin client needs our-id set")?; - let connector = self - .connector - .ok_or_cli_msg("Admin client needs connector set")?; + let connector = self.connector(); + Ok(DynGlobalApi::new_admin( our_id, peer_urls @@ -283,6 +280,14 @@ impl Opts { ) .into()) } + + fn connector(&self) -> Connector { + if self.use_tor { + Connector::Tor + } else { + Connector::default() + } + } } async fn load_or_generate_mnemonic(db: &Database) -> Result { @@ -621,6 +626,10 @@ impl FedimintCli { client_builder.with_module_inits(self.module_inits.clone()); client_builder.with_primary_module(1); + if cli.use_tor { + client_builder.with_tor_connector(); + } + Ok(client_builder) } @@ -629,7 +638,8 @@ impl FedimintCli { cli: &Opts, invite_code: InviteCode, ) -> CliResult { - let client_config = Connector::default() + let client_config = cli + .connector() .download_from_invite_code(&invite_code) .await .map_err_cli()?; @@ -691,7 +701,8 @@ impl FedimintCli { ) -> CliResult { let builder = self.make_client_builder(cli).await?; - let client_config = fedimint_api_client::api::net::Connector::default() + let client_config = cli + .connector() .download_from_invite_code(&invite_code) .await .map_err_cli()?; @@ -890,9 +901,8 @@ impl FedimintCli { } let client = self.client_open(&cli).await?; - // FIXME: Should the connector be fetched from the client somehow ? let ws_api: Arc<_> = WsFederationApi::new( - &Connector::default(), + &cli.connector(), client.get_peer_urls().await, client.api_secret(), ) diff --git a/fedimint-cli/src/utils.rs b/fedimint-cli/src/utils.rs index eec7064b56a..18193af856a 100644 --- a/fedimint-cli/src/utils.rs +++ b/fedimint-cli/src/utils.rs @@ -1,12 +1,7 @@ use std::num::ParseIntError; -use fedimint_api_client::api::net::Connector; use fedimint_core::PeerId; pub fn parse_peer_id(s: &str) -> Result { Ok(PeerId::from(s.parse::()?)) } - -pub fn parse_connector(s: &str) -> Result { - s.parse::() -} From d198907b35f714fdeeb4b0746ab8cb425e0497df Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Tue, 25 Jun 2024 15:50:30 -0300 Subject: [PATCH 06/18] refactor(api)!: expect `Connector` in `DynGlobalApi::from_invite_code` --- fedimint-api-client/src/api/mod.rs | 6 ++---- fedimint-api-client/src/lib.rs | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index ce485690830..9b24c761c5c 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -411,11 +411,9 @@ impl DynGlobalApi { GlobalFederationApiWithCache::new(WsFederationApi::new(connector, peers, api_secret)).into() } - // FIXME: (@leonardo) should the `Connector` be encoded in the `InviteCode` - // somehow ? - pub fn from_invite_code(invite_code: &InviteCode) -> Self { + pub fn from_invite_code(connector: &Connector, invite_code: &InviteCode) -> Self { GlobalFederationApiWithCache::new(WsFederationApi::new( - &Connector::default(), + connector, invite_code.peers().into_iter().collect_vec(), &invite_code.api_secret(), )) diff --git a/fedimint-api-client/src/lib.rs b/fedimint-api-client/src/lib.rs index 90343e9beaf..9a97688ce65 100644 --- a/fedimint-api-client/src/lib.rs +++ b/fedimint-api-client/src/lib.rs @@ -32,9 +32,7 @@ impl Connector { debug!("Downloading client config from {:?}", invite_code); let federation_id = invite_code.federation_id(); - // FIXME: (@leonardo) should fetch all the api_endpoints with proper - // [`Connector`] too! - let api = DynGlobalApi::from_invite_code(invite_code); + let api = DynGlobalApi::from_invite_code(self, invite_code); let api_secret = invite_code.api_secret(); fedimint_core::util::retry( From a1381ed01b9a8bb8ad6fb780afc445e177261725 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Tue, 25 Jun 2024 16:00:30 -0300 Subject: [PATCH 07/18] refactor(api)!: expect `Connector` in `DynGlobalApi::from_single_endpoint` --- fedimint-api-client/src/api/mod.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index 9b24c761c5c..ee5f72ac9aa 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -394,9 +394,14 @@ impl DynGlobalApi { .into() } - pub fn from_single_endpoint(peer: PeerId, url: SafeUrl, api_secret: &Option) -> Self { + pub fn from_single_endpoint( + peer: PeerId, + url: SafeUrl, + api_secret: &Option, + connector: &Connector, + ) -> Self { GlobalFederationApiWithCache::new(WsFederationApi::new( - &Connector::default(), + connector, vec![(peer, url)], api_secret, )) From b76c0bf846f314b60f0343474d5f6b0b3d7daccc Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Tue, 25 Jun 2024 16:07:49 -0300 Subject: [PATCH 08/18] refactor(api)!: add TODO's and comments about using `Connector` - add TODO's for DKG, server and ln-gateway `Connector::default()` usage. --- fedimint-api-client/src/api/mod.rs | 5 +++-- gateway/ln-gateway/src/client.rs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index ee5f72ac9aa..b73ebd0b2e1 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -368,8 +368,6 @@ impl AsRef for DynGlobalApi { } } -// FIXME: (@leonardo) how should this handle the different [`Connector`]'s ? -// Using [`Connector::default()`] for now. impl DynGlobalApi { pub fn new_admin( peer: PeerId, @@ -383,6 +381,9 @@ impl DynGlobalApi { .into() } + // FIXME: (@leonardo) Should we have the option to do DKG and config related + // actions through Tor ? Should we add the `Connector` choice to + // ConfigParams then ? pub fn from_pre_peer_id_admin_endpoint(url: SafeUrl, api_secret: &Option) -> Self { // PeerIds are used only for informational purposes, but just in case, make a // big number so it stands out diff --git a/gateway/ln-gateway/src/client.rs b/gateway/ln-gateway/src/client.rs index 9cb614ba295..58568092f98 100644 --- a/gateway/ln-gateway/src/client.rs +++ b/gateway/ln-gateway/src/client.rs @@ -91,6 +91,8 @@ impl GatewayClientBuilder { .open(root_secret) .await } else { + // FIXME: (@leonardo) How should we handle the `Connector` usage for ln-gateway + // ? let client_config = fedimint_api_client::api::net::Connector::default() .download_from_invite_code(&invite_code) .await?; From ea981996ab43f9caa417114dc81f12a2ff856401 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Wed, 26 Jun 2024 15:14:08 -0300 Subject: [PATCH 09/18] feat(tor): use circuit isolation with `isolated_client()` - add usage of `.isolated_client()` method when builing the `TorClient`, it adds minimal/initial level of circuit isolation when creating and bootstrapping a new `TorClient` for a `WsFederationApi` peer client. - refer to `#2610` for more context on circuit isolation based on `OperationId`, not meant to be addressed in this PR. --- fedimint-api-client/src/api/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index b73ebd0b2e1..f9844e57d2b 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -758,7 +758,8 @@ impl JsonRpcClient for WsClient { let tor_config = TorClientConfig::default(); let tor_client = TorClient::create_bootstrapped(tor_config) .await - .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + .map_err(|e| JsonRpcClientError::Transport(e.into()))? + .isolated_client(); // TODO: (@leonardo) should we implement our `IntoTorAddr` for `SafeUrl` // instead? From 14f73fc9d06a8a900d6cb653817c6880aff9d757 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Wed, 26 Jun 2024 16:07:02 -0300 Subject: [PATCH 10/18] chore(net): and and use `tor()` method instead of variant --- fedimint-api-client/src/api/net.rs | 6 ++++++ fedimint-cli/src/lib.rs | 2 +- fedimint-client/src/lib.rs | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fedimint-api-client/src/api/net.rs b/fedimint-api-client/src/api/net.rs index 381a29ff343..421f2587063 100644 --- a/fedimint-api-client/src/api/net.rs +++ b/fedimint-api-client/src/api/net.rs @@ -7,6 +7,12 @@ pub enum Connector { Tor, } +impl Connector { + pub fn tor() -> Connector { + Connector::Tor + } +} + impl Default for Connector { fn default() -> Self { Self::Tcp diff --git a/fedimint-cli/src/lib.rs b/fedimint-cli/src/lib.rs index 31f6ef57043..76460060292 100644 --- a/fedimint-cli/src/lib.rs +++ b/fedimint-cli/src/lib.rs @@ -283,7 +283,7 @@ impl Opts { fn connector(&self) -> Connector { if self.use_tor { - Connector::Tor + Connector::tor() } else { Connector::default() } diff --git a/fedimint-client/src/lib.rs b/fedimint-client/src/lib.rs index a3676836310..6a2ed109b12 100644 --- a/fedimint-client/src/lib.rs +++ b/fedimint-client/src/lib.rs @@ -2150,7 +2150,7 @@ impl ClientBuilder { } pub fn with_tor_connector(&mut self) { - self.with_connector(Connector::Tor); + self.with_connector(Connector::tor()); } async fn init( From 373a37833b68bbe2334325ccd95b6e3b6baa9073 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Wed, 10 Jul 2024 16:16:37 -0300 Subject: [PATCH 11/18] feat(tor): add onion address connection support - activate `arti-client` `onion-service-client` feature, which allows to have hidden services (onion services) connection support with arti. - validate if the given `SafeUrl` and `TorAddr` is an onion address, establish an anonymized data stream with the specified stream preferences. --- Cargo.lock | 65 ++++++++++++++++++++++++++++++ fedimint-api-client/Cargo.toml | 2 +- fedimint-api-client/src/api/mod.rs | 38 +++++++++++++++-- fedimint-client-wasm/src/lib.rs | 8 ++-- fedimint-core/src/util/mod.rs | 11 +++++ 5 files changed, 114 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66985d520bf..6f36d13f63d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -303,6 +303,8 @@ dependencies = [ "tor-dirmgr", "tor-error", "tor-guardmgr", + "tor-hsclient", + "tor-hscrypto", "tor-keymgr", "tor-linkspec", "tor-llcrypto", @@ -7362,6 +7364,7 @@ dependencies = [ "tor-bytes", "tor-cert", "tor-error", + "tor-hscrypto", "tor-linkspec", "tor-llcrypto", "tor-units", @@ -7525,6 +7528,7 @@ dependencies = [ "thiserror", "tor-circmgr", "tor-error", + "tor-hscrypto", "tor-linkspec", "tor-llcrypto", "tor-netdoc", @@ -7640,6 +7644,46 @@ dependencies = [ "tracing", ] +[[package]] +name = "tor-hsclient" +version = "0.20.0" +source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +dependencies = [ + "async-trait", + "derive-deftly", + "derive_more", + "educe", + "either", + "futures", + "itertools 0.13.0", + "postage", + "rand", + "retry-error", + "safelog", + "slotmap", + "strum 0.26.3", + "thiserror", + "tor-async-utils", + "tor-basic-utils", + "tor-bytes", + "tor-cell", + "tor-checkable", + "tor-circmgr", + "tor-config", + "tor-dirclient", + "tor-error", + "tor-hscrypto", + "tor-keymgr", + "tor-linkspec", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-rtcompat", + "tracing", +] + [[package]] name = "tor-hscrypto" version = "0.20.0" @@ -7770,7 +7814,9 @@ source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqli dependencies = [ "bitflags 2.4.2", "derive_more", + "digest", "futures", + "hex", "humantime", "itertools 0.13.0", "num_enum", @@ -7779,8 +7825,10 @@ dependencies = [ "static_assertions", "strum 0.26.3", "thiserror", + "time", "tor-basic-utils", "tor-error", + "tor-hscrypto", "tor-linkspec", "tor-llcrypto", "tor-netdoc", @@ -7808,6 +7856,7 @@ dependencies = [ "itertools 0.13.0", "once_cell", "phf", + "rand", "serde", "serde_with", "signature", @@ -7822,8 +7871,11 @@ dependencies = [ "tor-cert", "tor-checkable", "tor-error", + "tor-hscrypto", + "tor-linkspec", "tor-llcrypto", "tor-protover", + "tor-units", "weak-table", "zeroize", ] @@ -7885,6 +7937,7 @@ dependencies = [ "tor-checkable", "tor-config", "tor-error", + "tor-hscrypto", "tor-linkspec", "tor-llcrypto", "tor-log-ratelim", @@ -7893,6 +7946,7 @@ dependencies = [ "tor-units", "tracing", "typenum", + "visibility", "void", "zeroize", ] @@ -8243,6 +8297,17 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "visibility" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3fd98999db9227cf28e59d83e1f120f42bc233d4b152e8fab9bc87d5bb1e0f8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "void" version = "1.0.2" diff --git a/fedimint-api-client/Cargo.toml b/fedimint-api-client/Cargo.toml index 7b3356e5e71..7a14e1293f1 100644 --- a/fedimint-api-client/Cargo.toml +++ b/fedimint-api-client/Cargo.toml @@ -48,7 +48,7 @@ tokio-rustls = { version = "0.26.0", default-features = false, features = [ ] } webpki-roots = { version = "0.26.3" } rustls-pki-types = { version = "1.8.0" } -arti-client = { git = "https://github.com/oleonardolima/arti", branch = "feat/downgrade-rusqlite", version = "0.20.0", features = ["tokio", "rustls"], default-features = false } +arti-client = { git = "https://github.com/oleonardolima/arti", branch = "feat/downgrade-rusqlite", version = "0.20.0", features = ["tokio", "rustls", "onion-service-client"], default-features = false } strum = { version = "0.26.3" } [target.'cfg(target_family = "wasm")'.dependencies] diff --git a/fedimint-api-client/src/api/mod.rs b/fedimint-api-client/src/api/mod.rs index f9844e57d2b..a7156357e32 100644 --- a/fedimint-api-client/src/api/mod.rs +++ b/fedimint-api-client/src/api/mod.rs @@ -761,6 +761,8 @@ impl JsonRpcClient for WsClient { .map_err(|e| JsonRpcClientError::Transport(e.into()))? .isolated_client(); + debug!("Successfully created and bootstrapped the `TorClient`, for given `TorConfig`."); + // TODO: (@leonardo) should we implement our `IntoTorAddr` for `SafeUrl` // instead? let addr = ( @@ -770,11 +772,39 @@ impl JsonRpcClient for WsClient { .expect("It should've asserted for `port`, or used a default one, on construction"), ); let tor_addr = TorAddr::from(addr).map_err(|e| JsonRpcClientError::Transport(e.into()))?; + let tor_addr_clone = tor_addr.clone(); - let anonymized_stream = tor_client - .connect(tor_addr) - .await - .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + debug!( + ?tor_addr, + ?addr, + "Successfully created `TorAddr` for given address (i.e. host and port)" + ); + + // TODO: It can be updated to use `is_onion_address()` implementation, + // once https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2214 lands. + let anonymized_stream = if url.is_onion_address() { + let mut stream_prefs = arti_client::StreamPrefs::default(); + stream_prefs.connect_to_onion_services(arti_client::config::BoolOrAuto::Explicit(true)); + + let anonymized_stream = tor_client + .connect_with_prefs(tor_addr, &stream_prefs) + .await + .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + + debug!( + ?tor_addr_clone, + "Successfully connected to onion address `TorAddr`, and established an anonymized `DataStream`" + ); + anonymized_stream + } else { + let anonymized_stream = tor_client + .connect(tor_addr) + .await + .map_err(|e| JsonRpcClientError::Transport(e.into()))?; + + debug!(?tor_addr_clone, "Successfully connected to `Hostname`or `Ip` `TorAddr`, and established an anonymized `DataStream`"); + anonymized_stream + }; let is_tls = match url.scheme() { "wss" => true, diff --git a/fedimint-client-wasm/src/lib.rs b/fedimint-client-wasm/src/lib.rs index d101e4ff4f7..675946c01e5 100644 --- a/fedimint-client-wasm/src/lib.rs +++ b/fedimint-client-wasm/src/lib.rs @@ -59,11 +59,9 @@ impl WasmClient { // FIXME: add wallet module builder.with_primary_module(1); let invite_code = InviteCode::from_str(&invite_code)?; - let config = fedimint_api_client::download_from_invite_code( - fedimint_api_client::api::Connector::default(), - &invite_code, - ) - .await?; + let config = fedimint_api_client::api::net::Connector::default() + .download_from_invite_code(&invite_code) + .await?; let client = Arc::new(builder.join(root_secret, config, None).await?); Ok(Self { client }) } diff --git a/fedimint-core/src/util/mod.rs b/fedimint-core/src/util/mod.rs index 97af4a6c2dd..45420fe6c84 100644 --- a/fedimint-core/src/util/mod.rs +++ b/fedimint-core/src/util/mod.rs @@ -159,6 +159,17 @@ impl SafeUrl { pub fn join(&self, input: &str) -> Result { self.0.join(input).map(SafeUrl) } + + // It can be removed to use `is_onion_address()` implementation, + // once https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2214 lands. + #[allow(clippy::case_sensitive_file_extension_comparisons)] + pub fn is_onion_address(&self) -> bool { + let host = self + .host_str() + .expect("It should've asserted for `host` on construction"); + + host.ends_with(".onion") + } } impl Display for SafeUrl { From 4930c09441033a638575b13669c64a03dc2da1d3 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Mon, 15 Jul 2024 12:08:03 -0300 Subject: [PATCH 12/18] fix(audit): pin `curve25519-dalek` to `>=4.1.3` We need to pin this arti's `curve25519-dalek` dependency, due to `https://rustsec.org/advisories/RUSTSEC-2024-0344` vulnerability It's been updated by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2211, should be removed in next release. --- Cargo.lock | 16 +++++----------- fedimint-api-client/Cargo.toml | 3 +++ 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f36d13f63d..7d62cc00d4d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1387,16 +1387,15 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", - "platforms", "rustc_version", "subtle", "zeroize", @@ -1566,12 +1565,12 @@ checksum = "e1b84d32b18d9a256d81e4fec2e4cfd0ab6dde5e5ff49be1713ae0adbd0060c2" dependencies = [ "heck 0.5.0", "indexmap 2.2.5", - "itertools 0.12.1", + "itertools 0.13.0", "proc-macro-crate 3.1.0", "proc-macro2", "quote", "sha3", - "strum 0.25.0", + "strum 0.26.3", "syn 2.0.72", "void", ] @@ -1993,6 +1992,7 @@ dependencies = [ "async-trait", "base64 0.22.1", "bitcoin 0.30.2", + "curve25519-dalek", "fedimint-core", "fedimint-logging", "futures", @@ -5388,12 +5388,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "platforms" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" - [[package]] name = "plotters" version = "0.3.5" diff --git a/fedimint-api-client/Cargo.toml b/fedimint-api-client/Cargo.toml index 7a14e1293f1..7986ff83809 100644 --- a/fedimint-api-client/Cargo.toml +++ b/fedimint-api-client/Cargo.toml @@ -50,6 +50,9 @@ webpki-roots = { version = "0.26.3" } rustls-pki-types = { version = "1.8.0" } arti-client = { git = "https://github.com/oleonardolima/arti", branch = "feat/downgrade-rusqlite", version = "0.20.0", features = ["tokio", "rustls", "onion-service-client"], default-features = false } strum = { version = "0.26.3" } +# We need to pin this arti's `curve25519-dalek` dependency, due to `https://rustsec.org/advisories/RUSTSEC-2024-0344` vulnerability +# It's been updated by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2211, should be removed in next release. +curve25519-dalek = { version = ">=4.1.3" } [target.'cfg(target_family = "wasm")'.dependencies] jsonrpsee-wasm-client = "0.24.2" From 31f9601a22dc76eb9c67009163e50b35a36301be Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Mon, 15 Jul 2024 13:23:30 -0300 Subject: [PATCH 13/18] fix(audit): ignore `RUSTSEC-2023-0071` Add `RUSTSEC-2023-0071` to ignored advisories list on `audit.toml`, it's added to ignore because it currently doesn't have a fix and it's a transitive dependency from `arti_client` and tor ecosystem. In `arti` project it has also been ignored, and the team mentioned it's not currently impacted as it does not do any private key operation with RSA. Please check: https://gitlab.torproject.org/tpo/core/arti/-/issues/1141 `RUSTSEC-2023-0071`: https://rustsec.org/advisories/RUSTSEC-2023-0071 --- .cargo/audit.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cargo/audit.toml b/.cargo/audit.toml index 375fa5dd037..cdb612d6ac6 100644 --- a/.cargo/audit.toml +++ b/.cargo/audit.toml @@ -9,4 +9,4 @@ # # See the full example in: https://raw.githubusercontent.com/rustsec/rustsec/main/cargo-audit/audit.toml.example [advisories] -ignore = ["RUSTSEC-2023-0052"] +ignore = ["RUSTSEC-2023-0052", "RUSTSEC-2023-0071"] From a085fb9fd0a7e0a8a1555bf5872d4a499ab3b950 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Thu, 18 Jul 2024 15:00:22 -0300 Subject: [PATCH 14/18] refactor(gateway)!: add tor connection support - add a new field to `ConnectFedPayload`, it now also expects for `use_tor`, it defaults to `Connector::default()` usage if missing, otherwise use `Connector::Tor` if it's passed as true. - add `connector: Connector` field to `FederationConfig`, as it's need to persist what's the expected connector to use for each federation client used by the gateway. --- fedimint-api-client/src/api/net.rs | 5 ++++- fedimint-testing/src/federation.rs | 1 + gateway/cli/src/general_commands.rs | 13 +++++++++++-- gateway/ln-gateway/src/client.rs | 8 +++----- gateway/ln-gateway/src/db.rs | 4 ++++ gateway/ln-gateway/src/lib.rs | 15 +++++++++++++++ gateway/ln-gateway/src/rpc/mod.rs | 2 ++ 7 files changed, 40 insertions(+), 8 deletions(-) diff --git a/fedimint-api-client/src/api/net.rs b/fedimint-api-client/src/api/net.rs index 421f2587063..713e7b2c262 100644 --- a/fedimint-api-client/src/api/net.rs +++ b/fedimint-api-client/src/api/net.rs @@ -1,7 +1,10 @@ use std::fmt; use std::str::FromStr; -#[derive(Clone, Copy, Debug)] +use fedimint_core::encoding::{Decodable, Encodable}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq, Encodable, Decodable, Serialize, Deserialize)] pub enum Connector { Tcp, Tor, diff --git a/fedimint-testing/src/federation.rs b/fedimint-testing/src/federation.rs index e835465c52c..057eb68393a 100644 --- a/fedimint-testing/src/federation.rs +++ b/fedimint-testing/src/federation.rs @@ -134,6 +134,7 @@ impl FederationTest { pub async fn connect_gateway(&self, gw: &Gateway) { gw.handle_connect_federation(ConnectFedPayload { invite_code: self.invite_code().to_string(), + use_tor: Some(false), // TODO: (@leonardo) Should we get it from self.configs too ? }) .await .expect("Failed to connect federation"); diff --git a/gateway/cli/src/general_commands.rs b/gateway/cli/src/general_commands.rs index 8529d918110..d76cffeeab2 100644 --- a/gateway/cli/src/general_commands.rs +++ b/gateway/cli/src/general_commands.rs @@ -81,6 +81,9 @@ pub enum GeneralCommands { ConnectFed { /// Invite code to connect to the federation invite_code: String, + /// Activate usage of Tor (or not) as the connector for the federation + /// client + use_tor: Option, }, /// Leave a federation. LeaveFed { @@ -202,9 +205,15 @@ impl GeneralCommands { print_response(response); } - Self::ConnectFed { invite_code } => { + Self::ConnectFed { + invite_code, + use_tor, + } => { let response = create_client() - .connect_federation(ConnectFedPayload { invite_code }) + .connect_federation(ConnectFedPayload { + invite_code, + use_tor, + }) .await?; print_response(response); diff --git a/gateway/ln-gateway/src/client.rs b/gateway/ln-gateway/src/client.rs index 58568092f98..b6e83a9f45d 100644 --- a/gateway/ln-gateway/src/client.rs +++ b/gateway/ln-gateway/src/client.rs @@ -45,6 +45,7 @@ impl GatewayClientBuilder { invite_code, mint_channel_id, timelock_delta, + connector, .. } = config; let federation_id = invite_code.federation_id(); @@ -70,6 +71,7 @@ impl GatewayClientBuilder { .map_err(GatewayError::DatabaseError)?; client_builder.with_module_inits(registry); client_builder.with_primary_module(self.primary_module); + client_builder.with_connector(connector); let client_secret = if let Ok(secret) = Client::load_decodable_client_secret::<[u8; 64]>(client_builder.db_no_decoders()).await @@ -91,11 +93,7 @@ impl GatewayClientBuilder { .open(root_secret) .await } else { - // FIXME: (@leonardo) How should we handle the `Connector` usage for ln-gateway - // ? - let client_config = fedimint_api_client::api::net::Connector::default() - .download_from_invite_code(&invite_code) - .await?; + let client_config = connector.download_from_invite_code(&invite_code).await?; client_builder // TODO: make this configurable? .join(root_secret, client_config.clone(), invite_code.api_secret()) diff --git a/gateway/ln-gateway/src/db.rs b/gateway/ln-gateway/src/db.rs index f7eb4521252..efdccddfe65 100644 --- a/gateway/ln-gateway/src/db.rs +++ b/gateway/ln-gateway/src/db.rs @@ -2,6 +2,7 @@ use std::collections::BTreeMap; use bitcoin::Network; use bitcoin_hashes::{sha256, Hash}; +use fedimint_api_client::api::net::Connector; use fedimint_core::config::FederationId; use fedimint_core::db::{ CoreMigrationFn, DatabaseTransaction, DatabaseVersion, IDatabaseTransactionOpsCoreTyped, @@ -259,6 +260,7 @@ pub struct FederationConfig { pub timelock_delta: u64, #[serde(with = "serde_routing_fees")] pub fees: RoutingFees, + pub connector: Connector, } impl_db_record!( @@ -406,11 +408,13 @@ mod fedimint_migration_tests { federation_id, None, ); + let connector = Connector::default(); let federation_config = FederationConfig { invite_code, mint_channel_id: 2, timelock_delta: 10, fees: DEFAULT_FEES, + connector, }; dbtx.insert_new_entry(&FederationIdKey { id: federation_id }, &federation_config) diff --git a/gateway/ln-gateway/src/lib.rs b/gateway/ln-gateway/src/lib.rs index 75903c75883..1ef8f6d01ce 100644 --- a/gateway/ln-gateway/src/lib.rs +++ b/gateway/ln-gateway/src/lib.rs @@ -52,6 +52,7 @@ use db::{ GatewayConfiguration, GatewayConfigurationKey, GatewayDbtxNcExt, GATEWAYD_DATABASE_VERSION, }; use federation_manager::FederationManager; +use fedimint_api_client::api::net::Connector; use fedimint_api_client::api::FederationError; use fedimint_client::module::init::ClientModuleInitRegistry; use fedimint_client::ClientHandleArc; @@ -889,6 +890,19 @@ impl Gateway { let invite_code = InviteCode::from_str(&payload.invite_code).map_err(|e| { GatewayError::InvalidMetadata(format!("Invalid federation member string {e:?}")) })?; + + // TODO: (@leonardo) Should we use default, or respond with an error ? + let connector = match &payload.use_tor { + Some(use_tor) => match use_tor { + true => Connector::tor(), + false => Connector::default(), + }, + None => { + info!("Missing `use_tor` payload field, defaulting to `Connector::Tcp` variant!"); + Connector::default() + } + }; + let federation_id = invite_code.federation_id(); let mut federation_manager = self.federation_manager.write().await; @@ -914,6 +928,7 @@ impl Gateway { mint_channel_id, timelock_delta: 10, fees: gateway_config.routing_fees, + connector, }; let client = self diff --git a/gateway/ln-gateway/src/rpc/mod.rs b/gateway/ln-gateway/src/rpc/mod.rs index 0e721ba4f36..0d1cd65604c 100644 --- a/gateway/ln-gateway/src/rpc/mod.rs +++ b/gateway/ln-gateway/src/rpc/mod.rs @@ -20,6 +20,8 @@ pub const V1_API_ENDPOINT: &str = "v1"; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct ConnectFedPayload { pub invite_code: String, + #[serde(default)] + pub use_tor: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] From 14d874a6ce22551a917e5701fe509c38adeef244 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Wed, 24 Jul 2024 10:08:23 -0500 Subject: [PATCH 15/18] fix(db): add database migration for `FederationConfig` --- gateway/ln-gateway/src/db.rs | 78 ++++++++++++++++++++++--- modules/fedimint-lnv2-client/src/api.rs | 7 ++- 2 files changed, 75 insertions(+), 10 deletions(-) diff --git a/gateway/ln-gateway/src/db.rs b/gateway/ln-gateway/src/db.rs index efdccddfe65..1ea89afc016 100644 --- a/gateway/ln-gateway/src/db.rs +++ b/gateway/ln-gateway/src/db.rs @@ -24,10 +24,11 @@ use strum_macros::EnumIter; use crate::rpc::rpc_server::hash_password; -pub const GATEWAYD_DATABASE_VERSION: DatabaseVersion = DatabaseVersion(1); +pub const GATEWAYD_DATABASE_VERSION: DatabaseVersion = DatabaseVersion(2); pub trait GatewayDbtxNcExt { async fn save_federation_config(&mut self, config: &FederationConfig); + async fn load_federation_configs_v0(&mut self) -> BTreeMap; async fn load_federation_configs(&mut self) -> BTreeMap; async fn load_federation_config( &mut self, @@ -92,10 +93,18 @@ impl GatewayDbtxNcExt for DatabaseTransaction<'_, Cap> { self.insert_entry(&FederationIdKey { id }, config).await; } + async fn load_federation_configs_v0(&mut self) -> BTreeMap { + self.find_by_prefix(&FederationIdKeyPrefixV0) + .await + .map(|(key, config): (FederationIdKeyV0, FederationConfigV0)| (key.id, config)) + .collect::>() + .await + } + async fn load_federation_configs(&mut self) -> BTreeMap { self.find_by_prefix(&FederationIdKeyPrefix) .await - .map(|(key, config)| (key.id, config)) + .map(|(key, config): (FederationIdKey, FederationConfig)| (key.id, config)) .collect::>() .await } @@ -245,13 +254,30 @@ impl std::fmt::Display for DbKeyPrefix { } } +#[derive(Debug, Encodable, Decodable)] +struct FederationIdKeyPrefixV0; + +#[derive(Debug, Encodable, Decodable)] +struct FederationIdKeyPrefix; + #[derive(Debug, Clone, Encodable, Decodable, Eq, PartialEq, Hash, Ord, PartialOrd)] -struct FederationIdKey { +struct FederationIdKeyV0 { id: FederationId, } -#[derive(Debug, Encodable, Decodable)] -struct FederationIdKeyPrefix; +#[derive(Debug, Clone, Eq, PartialEq, Encodable, Decodable, Serialize, Deserialize)] +pub struct FederationConfigV0 { + pub invite_code: InviteCode, + pub mint_channel_id: u64, + pub timelock_delta: u64, + #[serde(with = "serde_routing_fees")] + pub fees: RoutingFees, +} + +#[derive(Debug, Clone, Encodable, Decodable, Eq, PartialEq, Hash, Ord, PartialOrd)] +struct FederationIdKey { + id: FederationId, +} #[derive(Debug, Clone, Eq, PartialEq, Encodable, Decodable, Serialize, Deserialize)] pub struct FederationConfig { @@ -263,12 +289,22 @@ pub struct FederationConfig { pub connector: Connector, } +impl_db_record!( + key = FederationIdKeyV0, + value = FederationConfigV0, + db_prefix = DbKeyPrefix::FederationConfig, +); + impl_db_record!( key = FederationIdKey, value = FederationConfig, db_prefix = DbKeyPrefix::FederationConfig, ); +impl_db_lookup!( + key = FederationIdKeyV0, + query_prefix = FederationIdKeyPrefixV0 +); impl_db_lookup!(key = FederationIdKey, query_prefix = FederationIdKeyPrefix); #[derive(Debug, Clone, Eq, PartialEq, Encodable, Decodable)] @@ -340,6 +376,7 @@ impl_db_lookup!( pub fn get_gatewayd_database_migrations() -> BTreeMap { let mut migrations: BTreeMap = BTreeMap::new(); migrations.insert(DatabaseVersion(0), |dbtx| migrate_to_v1(dbtx).boxed()); + migrations.insert(DatabaseVersion(1), |dbtx| migrate_to_v2(dbtx).boxed()); migrations } @@ -362,6 +399,32 @@ async fn migrate_to_v1(dbtx: &mut DatabaseTransaction<'_>) -> Result<(), anyhow: Ok(()) } +async fn migrate_to_v2(dbtx: &mut DatabaseTransaction<'_>) -> Result<(), anyhow::Error> { + // If there is no old federation configuration, there is nothing to do. + for (old_federation_id, old_federation_config) in dbtx.load_federation_configs_v0().await { + if let Some(old_federation_config) = dbtx + .remove_entry(&FederationIdKeyV0 { + id: old_federation_id, + }) + .await + { + let new_federation_config = FederationConfig { + invite_code: old_federation_config.invite_code, + mint_channel_id: old_federation_config.mint_channel_id, + timelock_delta: old_federation_config.timelock_delta, + fees: old_federation_config.fees, + connector: Connector::default(), + }; + let new_federation_key = FederationIdKey { + id: old_federation_id, + }; + dbtx.insert_entry(&new_federation_key, &new_federation_config) + .await; + } + } + Ok(()) +} + #[derive(Debug, Encodable, Decodable)] struct RegisteredIncomingContractKey([u8; 32]); @@ -409,15 +472,14 @@ mod fedimint_migration_tests { None, ); let connector = Connector::default(); - let federation_config = FederationConfig { + let federation_config = FederationConfigV0 { invite_code, mint_channel_id: 2, timelock_delta: 10, fees: DEFAULT_FEES, - connector, }; - dbtx.insert_new_entry(&FederationIdKey { id: federation_id }, &federation_config) + dbtx.insert_new_entry(&FederationIdKeyV0 { id: federation_id }, &federation_config) .await; let context = secp256k1::Secp256k1::new(); diff --git a/modules/fedimint-lnv2-client/src/api.rs b/modules/fedimint-lnv2-client/src/api.rs index 12dfc80c61b..5d7d25075a9 100644 --- a/modules/fedimint-lnv2-client/src/api.rs +++ b/modules/fedimint-lnv2-client/src/api.rs @@ -133,7 +133,10 @@ where .count() }); - let urls = union.into_iter().map(GatewayEndpoint::into_url).collect(); + let urls = union + .into_iter() + .map(fedimint_lnv2_common::GatewayEndpoint::into_url) + .collect(); Ok(urls) } @@ -150,7 +153,7 @@ where let urls = gateways .into_iter() - .map(GatewayEndpoint::into_url) + .map(fedimint_lnv2_common::GatewayEndpoint::into_url) .collect(); Ok(urls) From 0f8af395cf3c1f95f499feb47591c429a08d58c1 Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Sun, 28 Jul 2024 14:15:47 -0500 Subject: [PATCH 16/18] chore(arti-client): use patched and downgraded rusqlite version --- Cargo.lock | 323 ++++++++++++++++++--------------- fedimint-api-client/Cargo.toml | 2 +- 2 files changed, 178 insertions(+), 147 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7d62cc00d4d..3c1897adfec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -273,50 +273,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" -[[package]] -name = "arti-client" -version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" -dependencies = [ - "async-trait", - "cfg-if", - "derive-deftly", - "derive_builder_fork_arti", - "derive_more", - "educe", - "fs-mistrust", - "futures", - "hostname-validator", - "humantime", - "humantime-serde", - "libc", - "postage", - "rand", - "safelog", - "serde", - "thiserror", - "tor-async-utils", - "tor-basic-utils", - "tor-chanmgr", - "tor-circmgr", - "tor-config", - "tor-dirmgr", - "tor-error", - "tor-guardmgr", - "tor-hsclient", - "tor-hscrypto", - "tor-keymgr", - "tor-linkspec", - "tor-llcrypto", - "tor-netdir", - "tor-netdoc", - "tor-persist", - "tor-proto", - "tor-rtcompat", - "tracing", - "void", -] - [[package]] name = "ascii" version = "1.1.0" @@ -913,9 +869,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" [[package]] name = "byteorder" @@ -943,7 +899,8 @@ dependencies = [ [[package]] name = "caret" version = "0.4.6" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac3ae35de516b8ee4bfb6affc72bd6c121d2967206f307c026890f99c7875a0" [[package]] name = "cast" @@ -1549,9 +1506,9 @@ dependencies = [ [[package]] name = "derive-deftly" -version = "0.14.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f9bc3564f74be6c35d49a7efee54380d7946ccc631323067f33fabb9246027" +checksum = "063829d0f555b9fc22c8ddd206f1602372c4186e7b51046c43716f295182561d" dependencies = [ "derive-deftly-macros", "heck 0.5.0", @@ -1559,9 +1516,9 @@ dependencies = [ [[package]] name = "derive-deftly-macros" -version = "0.14.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b84d32b18d9a256d81e4fec2e4cfd0ab6dde5e5ff49be1713ae0adbd0060c2" +checksum = "68a27f0a2651f507903d67f8fb0688291e3e69f70381cdb5ee9729366f795f80" dependencies = [ "heck 0.5.0", "indexmap 2.2.5", @@ -1987,12 +1944,12 @@ name = "fedimint-api-client" version = "0.5.0-alpha" dependencies = [ "anyhow", - "arti-client", "async-lock", "async-trait", "base64 0.22.1", "bitcoin 0.30.2", "curve25519-dalek", + "fedimint-arti-client", "fedimint-core", "fedimint-logging", "futures", @@ -2018,6 +1975,50 @@ dependencies = [ "webpki-roots 0.26.3", ] +[[package]] +name = "fedimint-arti-client" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f624d537652186fabb4c90cd3f90bafb0127b318937098b2a3707a8d18dceda" +dependencies = [ + "async-trait", + "cfg-if", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "educe", + "fedimint-tor-dirmgr", + "fs-mistrust", + "futures", + "hostname-validator", + "humantime", + "humantime-serde", + "libc", + "postage", + "safelog", + "serde", + "thiserror", + "tor-async-utils", + "tor-basic-utils", + "tor-chanmgr", + "tor-circmgr", + "tor-config", + "tor-error", + "tor-guardmgr", + "tor-hsclient", + "tor-hscrypto", + "tor-keymgr", + "tor-linkspec", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-rtcompat", + "tracing", + "void", +] + [[package]] name = "fedimint-bip39" version = "0.5.0-alpha" @@ -3142,6 +3143,57 @@ dependencies = [ "tower", ] +[[package]] +name = "fedimint-tor-dirmgr" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6a81954545f13dc907a25e18bf1b654e6e6b90248465969430525c8ecbe5dfc" +dependencies = [ + "async-trait", + "base64ct", + "derive_builder_fork_arti", + "derive_more", + "digest", + "educe", + "event-listener", + "fs-mistrust", + "fslock", + "futures", + "hex", + "humantime", + "humantime-serde", + "itertools 0.13.0", + "memmap2 0.9.4", + "once_cell", + "paste", + "postage", + "rand", + "rusqlite", + "safelog", + "scopeguard", + "serde", + "signature", + "strum 0.26.3", + "thiserror", + "time", + "tor-async-utils", + "tor-basic-utils", + "tor-checkable", + "tor-circmgr", + "tor-config", + "tor-consdiff", + "tor-dirclient", + "tor-error", + "tor-guardmgr", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-rtcompat", + "tracing", +] + [[package]] name = "fedimint-tpe" version = "0.5.0-alpha" @@ -3444,7 +3496,8 @@ dependencies = [ [[package]] name = "fs-mistrust" version = "0.7.11" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa843fc37db9fe16a248421fa36454f903dbc2ff722cc613a7e12932ee572c7" dependencies = [ "derive_builder_fork_arti", "dirs", @@ -6026,7 +6079,8 @@ dependencies = [ [[package]] name = "retry-error" version = "0.5.3" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b960f1dc847b9e4383ca73b4e8002f725b2f562addb9ade88a6ba109b305e96d" [[package]] name = "rfc6979" @@ -6248,7 +6302,8 @@ checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "safelog" version = "0.3.7" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1e9cd092ef5e122f1a34f3fe15de8e9685f8f610e31c4c0643976aa5e31737" dependencies = [ "derive_more", "educe", @@ -6461,9 +6516,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -6482,9 +6537,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ "base64 0.22.1", "chrono", @@ -6500,9 +6555,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ "darling 0.20.8", "proc-macro2", @@ -7209,7 +7264,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.13", + "winnow 0.6.16", ] [[package]] @@ -7303,7 +7358,8 @@ dependencies = [ [[package]] name = "tor-async-utils" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10e0b21e5da44d48fb79f9ccc468fdb4e260514c3054fda2a9ebcc3572a3b2a9" dependencies = [ "futures", "pin-project", @@ -7314,7 +7370,8 @@ dependencies = [ [[package]] name = "tor-basic-utils" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c877853697cd45b6ba114e11a835df92db1aafb0af0d2771dabbe7d4107321b" dependencies = [ "hex", "libc", @@ -7328,7 +7385,8 @@ dependencies = [ [[package]] name = "tor-bytes" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1b8ab9a722deaf9d6db2ec00adc05465b5e9654504426c4a46d58ef49e4692" dependencies = [ "bytes", "digest", @@ -7343,7 +7401,8 @@ dependencies = [ [[package]] name = "tor-cell" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a278cc2fb3cbf9fc4137d492e0900f14e615f9181b8c5c7d5d1f1822725c65b" dependencies = [ "bitflags 2.4.2", "bytes", @@ -7367,7 +7426,8 @@ dependencies = [ [[package]] name = "tor-cert" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d788592147d24f6269cea9bf43c18393905a8778540f4ab77065306e8158d105" dependencies = [ "caret", "derive_more", @@ -7381,7 +7441,8 @@ dependencies = [ [[package]] name = "tor-chanmgr" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f70c19181bb19d58eb8e135146d617c6b7497c69e08a23c0967f42040926b4" dependencies = [ "async-trait", "derive_builder_fork_arti", @@ -7412,7 +7473,8 @@ dependencies = [ [[package]] name = "tor-checkable" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e598cac17d259d75093ebac644610d4f91259f056f26408146921808391fd4ba" dependencies = [ "humantime", "signature", @@ -7423,7 +7485,8 @@ dependencies = [ [[package]] name = "tor-circmgr" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe10d9577e2bf3042b2985e46b9144a9a4cdafecb6292948bca627781025e4b" dependencies = [ "amplify", "async-trait", @@ -7467,7 +7530,8 @@ dependencies = [ [[package]] name = "tor-config" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cbae8248eca02109bfd2d8b106d5f44d3898a1c79592cfb526e1d4a4bd11378" dependencies = [ "derive-deftly", "derive_builder_fork_arti", @@ -7496,7 +7560,8 @@ dependencies = [ [[package]] name = "tor-consdiff" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "997edd03dc12f1865b2e651b9f5c90f586c73b908cb470acb670261608432e27" dependencies = [ "digest", "hex", @@ -7507,7 +7572,8 @@ dependencies = [ [[package]] name = "tor-dirclient" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad3fc105b351b327a7f21348fa6ebf8b89c8e2106be77c94eb8d69f01dbfaa7" dependencies = [ "async-compression", "base64ct", @@ -7531,60 +7597,11 @@ dependencies = [ "tracing", ] -[[package]] -name = "tor-dirmgr" -version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" -dependencies = [ - "async-trait", - "base64ct", - "derive_builder_fork_arti", - "derive_more", - "digest", - "educe", - "event-listener", - "fs-mistrust", - "fslock", - "futures", - "hex", - "humantime", - "humantime-serde", - "itertools 0.13.0", - "memmap2 0.9.4", - "once_cell", - "paste", - "postage", - "rand", - "rusqlite", - "safelog", - "scopeguard", - "serde", - "signature", - "strum 0.26.3", - "thiserror", - "time", - "tor-async-utils", - "tor-basic-utils", - "tor-checkable", - "tor-circmgr", - "tor-config", - "tor-consdiff", - "tor-dirclient", - "tor-error", - "tor-guardmgr", - "tor-llcrypto", - "tor-netdir", - "tor-netdoc", - "tor-persist", - "tor-proto", - "tor-rtcompat", - "tracing", -] - [[package]] name = "tor-error" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab4f75d5d8e00890261b9ff22e7c40354fdf88b375d83a6974d8128207f4db3" dependencies = [ "backtrace", "derive_more", @@ -7601,7 +7618,8 @@ dependencies = [ [[package]] name = "tor-guardmgr" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58efe45c0ccdbcfbab5912faa7c0ab550bdcc8a25553d68c31bebff28a9bb912" dependencies = [ "amplify", "base64ct", @@ -7641,7 +7659,8 @@ dependencies = [ [[package]] name = "tor-hsclient" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40668cea7d86ebcff26a07ed728f6006f9a89f320e32b659990d12602ae9c980" dependencies = [ "async-trait", "derive-deftly", @@ -7681,7 +7700,8 @@ dependencies = [ [[package]] name = "tor-hscrypto" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6045a6105e8159e86a73d9e925c67d7ef85dec1cbf160230c02fd94430ea7192" dependencies = [ "data-encoding", "derive_more", @@ -7703,7 +7723,8 @@ dependencies = [ [[package]] name = "tor-keymgr" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce378b229df3d957f811c8c330edf4c1cf3da55d3a4b009c61ad95f0be70ed01" dependencies = [ "amplify", "arrayvec", @@ -7734,7 +7755,8 @@ dependencies = [ [[package]] name = "tor-linkspec" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d20859d824c68462077a7ad79394348a31d541e170e98caed6c69d4282081347" dependencies = [ "base64ct", "by_address", @@ -7759,7 +7781,8 @@ dependencies = [ [[package]] name = "tor-llcrypto" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5df07e4a32aab17c8813aa43719a07fae6167212e4506b48f79a035bd2f4e9" dependencies = [ "aes", "base64ct", @@ -7789,7 +7812,8 @@ dependencies = [ [[package]] name = "tor-log-ratelim" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc9d75654f5baa76555fd2577b92c9baf828fb3b724cf41c9741693b00ae597e" dependencies = [ "futures", "humantime", @@ -7804,7 +7828,8 @@ dependencies = [ [[package]] name = "tor-netdir" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b39f8f3dcad5504634b66a4ae209a2d0dd9936752f6e5a3722c8ff6831ab5e" dependencies = [ "bitflags 2.4.2", "derive_more", @@ -7835,7 +7860,8 @@ dependencies = [ [[package]] name = "tor-netdoc" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d742d50881e12014880daf2b6c82deb74a00bda97582ab0a2a8ad55ae2ffa5cb" dependencies = [ "amplify", "base64ct", @@ -7877,31 +7903,30 @@ dependencies = [ [[package]] name = "tor-persist" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c114ebe5597c0e6c5e692130f9343a46673e821f3318b69791a84076628c4e2" dependencies = [ "derive-deftly", "derive_more", "filetime", "fs-mistrust", "fslock", - "futures", "itertools 0.13.0", "paste", "sanitize-filename", "serde", "serde_json", "thiserror", - "tor-async-utils", "tor-basic-utils", "tor-error", "tracing", - "void", ] [[package]] name = "tor-proto" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0fa03f66ac9bd02c1893ba054733e18e556c8b78b3c20f72d3eb3534d5a98ee" dependencies = [ "asynchronous-codec", "bitvec", @@ -7948,7 +7973,8 @@ dependencies = [ [[package]] name = "tor-protover" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e600bd6da80c68389337bd1e407617e510534087571790b79289de6aed4ee52" dependencies = [ "caret", "thiserror", @@ -7957,7 +7983,8 @@ dependencies = [ [[package]] name = "tor-relay-selection" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ffcf6469084ac835e5cbc416a3536f5305b8072d9ae56d16d02839f31a2478" dependencies = [ "rand", "serde", @@ -7970,7 +7997,8 @@ dependencies = [ [[package]] name = "tor-rtcompat" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fae92628eb8967bbd33754b24b95d43161d4c0ef7bf9eaaab111f5efd53afb40" dependencies = [ "async-trait", "async_executors", @@ -7993,7 +8021,8 @@ dependencies = [ [[package]] name = "tor-rtmock" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054701378b4f5e7c29cc819ca3034e8e1a69418d485d10b4ac790a8936974c95" dependencies = [ "amplify", "async-trait", @@ -8020,7 +8049,8 @@ dependencies = [ [[package]] name = "tor-socksproto" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "649e5f4b48f966adaa4934ab73086c94aa26356a01b2b51748db006d09484197" dependencies = [ "caret", "subtle", @@ -8032,7 +8062,8 @@ dependencies = [ [[package]] name = "tor-units" version = "0.20.0" -source = "git+https://github.com/oleonardolima/arti?branch=feat/downgrade-rusqlite#e616c8d91e18d232007020c48183e2f9255e96f1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae1da9b62c697ba9924f26051ed346ae3b8b57eab7b4d367cb2f5462e05902a" dependencies = [ "derive_more", "thiserror", @@ -8717,9 +8748,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.13" +version = "0.6.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c" dependencies = [ "memchr", ] diff --git a/fedimint-api-client/Cargo.toml b/fedimint-api-client/Cargo.toml index 7986ff83809..5a07402b81c 100644 --- a/fedimint-api-client/Cargo.toml +++ b/fedimint-api-client/Cargo.toml @@ -48,7 +48,7 @@ tokio-rustls = { version = "0.26.0", default-features = false, features = [ ] } webpki-roots = { version = "0.26.3" } rustls-pki-types = { version = "1.8.0" } -arti-client = { git = "https://github.com/oleonardolima/arti", branch = "feat/downgrade-rusqlite", version = "0.20.0", features = ["tokio", "rustls", "onion-service-client"], default-features = false } +arti-client = { version = "0.20.0", features = ["tokio", "rustls", "onion-service-client"], default-features = false, package = "fedimint-arti-client" } strum = { version = "0.26.3" } # We need to pin this arti's `curve25519-dalek` dependency, due to `https://rustsec.org/advisories/RUSTSEC-2024-0344` vulnerability # It's been updated by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2211, should be removed in next release. From c2669541db175542d33eac40a63833aac7a7e97e Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Thu, 1 Aug 2024 08:20:03 -0500 Subject: [PATCH 17/18] fix(docker): add `pkgs.sqlite`, `pkgs.fakeNss` to `dockerTools` content - the `pkgs.sqlite` is required, as arti-client (especifically `tor-dirmgr`) relies on sqlite for database. - the `pkgs.fakeNss` is required, because the `dockerTools` builds on top of Docker `scratch` base image, which is basically an empty data/filesystem. The arti-client and the `fs-mistrust` subcrate relies on the existance of some folders and files on the filesystem, in order to run some checks to guarantee that's it's private to the user, e.g `/etc/passwd`. The `fakeNss` package handles that by creating such filesystem structure in the docker image, reference: https://nixos.org/manual/nixpkgs/stable/#sec-fakeNss --- nix/flakebox.nix | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/nix/flakebox.nix b/nix/flakebox.nix index e1b0611cd16..cb995f694d5 100644 --- a/nix/flakebox.nix +++ b/nix/flakebox.nix @@ -608,6 +608,8 @@ rec { fedimint-pkgs pkgs.bash pkgs.coreutils + pkgs.sqlite + pkgs.fakeNss ]; config = { Cmd = [ ]; # entrypoint will handle empty vs non-empty cmd @@ -630,7 +632,7 @@ rec { fedimint-cli = pkgs.dockerTools.buildLayeredImage { name = "fedimint-cli"; - contents = [ fedimint-pkgs pkgs.bash pkgs.coreutils ]; + contents = [ fedimint-pkgs pkgs.bash pkgs.coreutils pkgs.sqlite pkgs.fakeNss ]; config = { Cmd = [ "${fedimint-pkgs}/bin/fedimint-cli" @@ -640,7 +642,7 @@ rec { gatewayd = pkgs.dockerTools.buildLayeredImage { name = "gatewayd"; - contents = [ gateway-pkgs pkgs.bash pkgs.coreutils ]; + contents = [ gateway-pkgs pkgs.bash pkgs.coreutils pkgs.sqlite pkgs.fakeNss ]; config = { Cmd = [ "${gateway-pkgs}/bin/gatewayd" @@ -650,7 +652,7 @@ rec { gateway-cli = pkgs.dockerTools.buildLayeredImage { name = "gateway-cli"; - contents = [ gateway-pkgs pkgs.bash pkgs.coreutils ]; + contents = [ gateway-pkgs pkgs.bash pkgs.coreutils pkgs.sqlite pkgs.fakeNss ]; config = { Cmd = [ "${gateway-pkgs}/bin/gateway-cli" @@ -662,7 +664,15 @@ rec { pkgs.dockerTools.buildLayeredImage { name = "fedimint-devtools"; - contents = [ devimint fedimint-dbtool fedimint-load-test-tool pkgs.bash pkgs.coreutils fedimint-recoverytool ]; + contents = [ + devimint + fedimint-dbtool + fedimint-load-test-tool + fedimint-recoverytool + pkgs.bash + pkgs.coreutils + pkgs.sqlite + ]; config = { Cmd = [ "${pkgs.bash}/bin/bash" From 6df8232eb83e1ae338607c2ed627554bc861af7b Mon Sep 17 00:00:00 2001 From: Leonardo Lima Date: Tue, 13 Aug 2024 17:02:21 -0300 Subject: [PATCH 18/18] fix(url): use `unwrap_or_default` instead of `expect` It updates the `is_onion_addrs` method to default to false instead of panicking with expect message. --- fedimint-core/src/util/mod.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fedimint-core/src/util/mod.rs b/fedimint-core/src/util/mod.rs index 45420fe6c84..a58b9193b26 100644 --- a/fedimint-core/src/util/mod.rs +++ b/fedimint-core/src/util/mod.rs @@ -164,9 +164,7 @@ impl SafeUrl { // once https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2214 lands. #[allow(clippy::case_sensitive_file_extension_comparisons)] pub fn is_onion_address(&self) -> bool { - let host = self - .host_str() - .expect("It should've asserted for `host` on construction"); + let host = self.host_str().unwrap_or_default(); host.ends_with(".onion") }