From b3a621a7819737bc3200706885cf9d00c4b4cdee Mon Sep 17 00:00:00 2001 From: dzdidi Date: Thu, 30 Jan 2025 13:50:57 +0100 Subject: [PATCH] Update dependencies - Add toolchain - Common: - bitcoin v0.32.0; - lightning v0.1.0 - TEOS: - bitcoin v0.32.0; - bitcoincore-rpc v0.19.0; - lightning v0.1.0; - lightning-net-tokio v0.1.0; - lightning-block-sync v0.1.0 - Watchtower-Plugin: - bitcoin v0.32.0; - cln-plugin v0.3.0 --- .github/workflows/cln-plugin.yaml | 14 +- Cargo.lock | 2188 ++++++++++++++++------------- Cargo.toml | 2 +- DEPENDENCIES.md | 2 +- rust-toolchain.toml | 6 + teos-common/Cargo.toml | 6 +- teos-common/src/cryptography.rs | 23 +- teos-common/src/receipts.rs | 6 +- teos-common/src/test_utils.rs | 14 +- teos/Cargo.toml | 11 +- teos/src/api/http.rs | 23 +- teos/src/api/internal.rs | 48 +- teos/src/bitcoin_cli.rs | 27 +- teos/src/carrier.rs | 39 +- teos/src/chain_monitor.rs | 8 +- teos/src/dbm.rs | 18 +- teos/src/extended_appointment.rs | 2 +- teos/src/gatekeeper.rs | 6 +- teos/src/main.rs | 15 +- teos/src/responder.rs | 63 +- teos/src/test_utils.rs | 62 +- teos/src/tx_index.rs | 112 +- teos/src/watcher.rs | 105 +- watchtower-plugin/Cargo.toml | 6 +- watchtower-plugin/src/main.rs | 96 +- watchtower-plugin/src/retrier.rs | 28 +- 26 files changed, 1649 insertions(+), 1281 deletions(-) create mode 100644 rust-toolchain.toml diff --git a/.github/workflows/cln-plugin.yaml b/.github/workflows/cln-plugin.yaml index 15b74ff..6b710ab 100644 --- a/.github/workflows/cln-plugin.yaml +++ b/.github/workflows/cln-plugin.yaml @@ -8,7 +8,7 @@ on: env: bitcoind_version: "27.0" - cln_version: "24.02.2" + cln_version: "24.11.1" jobs: cache-cln: @@ -53,6 +53,11 @@ jobs: - uses: arduino/setup-protoc@v3 with: repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.81.0 + components: rustfmt, clippy - name: Install bitcoind run: | wget https://bitcoincore.org/bin/bitcoin-core-${{ env.bitcoind_version }}/bitcoin-${{ env.bitcoind_version }}-x86_64-linux-gnu.tar.gz @@ -66,9 +71,10 @@ jobs: with: path: lightning key: ${{ runner.os }}-build-${{ env.cache-name }}-v${{ env.cln_version }} - - name: Link CLN - run: | - cd lightning && sudo make install + - name: Link CLN + run: | + source $HOME/.cargo/env + cd lightning && sudo make install - name: Install teos and the plugin run: | cargo install --locked --path teos diff --git a/Cargo.lock b/Cargo.lock index a8ace64..bbf6e71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -28,24 +28,15 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", "once_cell", "version_check", ] -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -66,15 +57,21 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.57" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "asn1-rs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ad1373757efa0f70ec53939aabc7152e1591cb485208052993070ac8d2429d" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -88,14 +85,14 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", - "synstructure 0.13.1", + "syn 2.0.96", + "synstructure", ] [[package]] @@ -106,7 +103,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] @@ -121,34 +118,35 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.2" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", + "pin-project-lite 0.2.16", ] [[package]] name = "async-stream-impl" -version = "0.3.2" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.96", ] [[package]] name = "async-trait" -version = "0.1.76" +version = "0.1.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531b97fb4cd3dfdce92c35dedbfdc1f0b9d8091c8ca943d6dae340ef5012d514" +checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] @@ -164,9 +162,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" @@ -176,18 +174,18 @@ checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", "axum-core", - "bitflags", - "bytes 1.1.0", + "bitflags 1.3.2", + "bytes 1.9.0", "futures-util", - "http", + "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", - "itoa 1.0.10", + "hyper 0.14.32", + "itoa 1.0.14", "matchit", "memchr", "mime", "percent-encoding", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.16", "rustversion", "serde", "sync_wrapper", @@ -203,9 +201,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ "async-trait", - "bytes 1.1.0", + "bytes 1.9.0", "futures-util", - "http", + "http 0.2.12", "http-body 0.4.6", "mime", "rustversion", @@ -220,26 +218,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.11", + "getrandom 0.2.15", "instant", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.16", "rand 0.8.5", - "tokio 1.36.0", + "tokio 1.43.0", ] [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if 1.0.0", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -249,59 +247,98 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" [[package]] -name = "base64" -version = "0.13.0" +name = "base58ck" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "base64" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" - -[[package]] -name = "base64-compat" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8d4d2746f89841e49230dd26917df1876050f95abafafbe34f47cb534b88d7" +checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" dependencies = [ - "byteorder", + "bitcoin-internals", + "bitcoin_hashes", ] [[package]] -name = "bech32" -version = "0.8.1" +name = "base64" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9ff0bbfd639f15c74af777d81383cf53efb7c93613f6cab67c6c11e05bbf8b" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" [[package]] name = "bitcoin" -version = "0.28.1" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bba324e6baf655b882df672453dbbc527bc938cadd27750ae510aaccc3a66a" +checksum = "ce6bc65742dea50536e35ad42492b234c27904a27f0abdcbce605015cb4ea026" dependencies = [ - "base64-compat", + "base58ck", "bech32", + "bitcoin-internals", + "bitcoin-io", + "bitcoin-units", "bitcoin_hashes", + "hex-conservative", + "hex_lit", "secp256k1", "serde", ] [[package]] -name = "bitcoin_hashes" -version = "0.10.0" +name = "bitcoin-internals" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006cc91e1a1d99819bc5b8214be3555c1f0611b169f527a1fdc54ed1f2b745b0" +checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" dependencies = [ "serde", ] [[package]] -name = "bitcoincore-rpc" -version = "0.15.0" +name = "bitcoin-io" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0e67dbf7a9971e7f4276f6089e9e814ce0f624a03216b7d92d00351ae7fb3e" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + +[[package]] +name = "bitcoin-units" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" +dependencies = [ + "bitcoin-internals", + "serde", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", + "serde", +] + +[[package]] +name = "bitcoincore-rpc" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedd23ae0fd321affb4bbbc36126c6f49a32818dc6b979395d24da8c9d4e80ee" dependencies = [ "bitcoincore-rpc-json", "jsonrpc", @@ -312,9 +349,9 @@ dependencies = [ [[package]] name = "bitcoincore-rpc-json" -version = "0.15.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e2ae16202721ba8c3409045681fac790a5ddc791f05731a2df22c0c6bffc0f1" +checksum = "d8909583c5fab98508e80ef73e5592a651c954993dc6b7739963257d19f0e71a" dependencies = [ "bitcoin", "serde", @@ -327,6 +364,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" + [[package]] name = "block-buffer" version = "0.9.0" @@ -339,9 +382,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -354,24 +397,25 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bstr" -version = "0.2.17" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", + "serde", ] [[package]] name = "bumpalo" -version = "3.10.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -381,17 +425,17 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.1.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" -version = "1.0.83" +version = "1.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" dependencies = [ - "libc", + "shlex", ] [[package]] @@ -433,9 +477,9 @@ dependencies = [ [[package]] name = "chunked_transfer" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" [[package]] name = "cipher" @@ -454,7 +498,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim", "textwrap", "unicode-width", @@ -463,31 +507,31 @@ dependencies = [ [[package]] name = "cln-plugin" -version = "0.1.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49be99e6e5ad55d420884b5b2a68aca890bcd1a1540ed6d2892363623a60f538" +checksum = "55eefc811f7d5280586dec7342824a84ab81f1d7e0cdb4cd579c1470e3e236cc" dependencies = [ "anyhow", - "bytes 1.1.0", - "env_logger", + "bytes 1.9.0", "futures", "log", "serde", "serde_json", - "tokio 1.36.0", + "tokio 1.43.0", "tokio-stream", - "tokio-util 0.7.10", + "tokio-util 0.7.13", + "tracing", + "tracing-subscriber", ] [[package]] name = "colored" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ - "atty", "lazy_static", - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] @@ -498,9 +542,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -508,9 +552,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" @@ -523,18 +567,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -565,28 +609,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" - -[[package]] -name = "deadpool" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e" -dependencies = [ - "async-trait", - "deadpool-runtime", - "num_cpus", - "retain_mut", - "tokio 1.36.0", -] - -[[package]] -name = "deadpool-runtime" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1" +checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" [[package]] name = "der-parser" @@ -613,15 +638,15 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.98", + "syn 2.0.96", ] [[package]] @@ -639,26 +664,32 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.2", + "block-buffer 0.10.4", "crypto-common", ] [[package]] name = "displaydoc" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] -name = "ed25519" -version = "1.5.2" +name = "dnssec-prover" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" +checksum = "96487aad690d45a83f2b9876828ba856c5430bbb143cb5730d8a5d04a4805179" + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ "signature", ] @@ -679,32 +710,19 @@ dependencies = [ [[package]] name = "either" -version = "1.6.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -713,23 +731,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.2.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ - "errno-dragonfly", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", "libc", + "windows-sys 0.59.0", ] [[package]] @@ -746,18 +753,15 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "1.7.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" -dependencies = [ - "instant", -] +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fixedbitset" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "fnv" @@ -782,11 +786,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "matches", "percent-encoding", ] @@ -802,7 +805,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" dependencies = [ - "bitflags", + "bitflags 1.3.2", "fuchsia-zircon-sys", ] @@ -814,9 +817,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -829,9 +832,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -839,15 +842,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -856,38 +859,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.96", ] [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -896,16 +899,16 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.16", "pin-utils", "slab", ] [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -924,9 +927,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", "libc", @@ -934,22 +937,34 @@ dependencies = [ ] [[package]] -name = "gimli" -version = "0.28.1" +name = "getrandom" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "globset" -version = "0.4.8" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ - "aho-corasick 0.7.18", + "aho-corasick", "bstr", - "fnv", "log", - "regex", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -963,8 +978,8 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 1.8.0", + "http 0.2.12", + "indexmap 1.9.3", "slab", "tokio 0.2.25", "tokio-util 0.3.1", @@ -974,20 +989,20 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "bytes 1.1.0", + "bytes 1.9.0", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 2.2.5", + "http 0.2.12", + "indexmap 2.7.1", "slab", - "tokio 1.36.0", - "tokio-util 0.7.10", + "tokio 1.43.0", + "tokio-util 0.7.13", "tracing", ] @@ -1002,9 +1017,21 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +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.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hashlink" @@ -1017,18 +1044,17 @@ dependencies = [ [[package]] name = "headers" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.0", - "bitflags", - "bytes 1.1.0", + "base64 0.21.7", + "bytes 1.9.0", "headers-core", - "http", - "httpdate 1.0.2", + "http 0.2.12", + "httpdate 1.0.3", "mime", - "sha-1", + "sha1", ] [[package]] @@ -1037,7 +1063,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" dependencies = [ - "http", + "http 0.2.12", ] [[package]] @@ -1051,9 +1077,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -1066,12 +1092,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -1082,6 +1105,21 @@ dependencies = [ "serde", ] +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "hex_lit" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" + [[package]] name = "hmac" version = "0.11.0" @@ -1094,11 +1132,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.3" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] @@ -1107,9 +1145,20 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "bytes 1.1.0", + "bytes 1.9.0", "fnv", - "itoa 1.0.10", + "itoa 1.0.14", +] + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes 1.9.0", + "fnv", + "itoa 1.0.14", ] [[package]] @@ -1119,7 +1168,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ "bytes 0.5.6", - "http", + "http 0.2.12", ] [[package]] @@ -1128,16 +1177,16 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "bytes 1.1.0", - "http", - "pin-project-lite 0.2.13", + "bytes 1.9.0", + "http 0.2.12", + "pin-project-lite 0.2.16", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -1147,15 +1196,9 @@ checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" @@ -1168,7 +1211,7 @@ dependencies = [ "futures-core", "futures-util", "h2 0.2.7", - "http", + "http 0.2.12", "http-body 0.3.1", "httparse", "httpdate 0.3.2", @@ -1183,23 +1226,23 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ - "bytes 1.1.0", + "bytes 1.9.0", "futures-channel", "futures-core", "futures-util", - "h2 0.3.25", - "http", + "h2 0.3.26", + "http 0.2.12", "http-body 0.4.6", "httparse", - "httpdate 1.0.2", - "itoa 1.0.10", - "pin-project-lite 0.2.13", - "socket2 0.5.6", - "tokio 1.36.0", + "httpdate 1.0.3", + "itoa 1.0.14", + "pin-project-lite 0.2.16", + "socket2 0.5.8", + "tokio 1.43.0", "tower-service", "tracing", "want", @@ -1211,9 +1254,9 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.28", - "pin-project-lite 0.2.13", - "tokio 1.36.0", + "hyper 0.14.32", + "pin-project-lite 0.2.16", + "tokio 1.43.0", "tokio-io-timeout", ] @@ -1223,63 +1266,181 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.1.0", - "hyper 0.14.28", + "bytes 1.9.0", + "hyper 0.14.32", "native-tls", - "tokio 1.36.0", + "tokio 1.43.0", "tokio-native-tls", ] [[package]] -name = "idna" -version = "0.2.3" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] name = "indexmap" -version = "1.8.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown 0.11.2", + "hashbrown 0.12.3", ] [[package]] name = "indexmap" -version = "2.2.5" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.15.2", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "io-lifetimes" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" -dependencies = [ - "libc", - "windows-sys 0.42.0", -] - [[package]] name = "iovec" version = "0.1.4" @@ -1291,27 +1452,15 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.5.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" - -[[package]] -name = "is-terminal" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" -dependencies = [ - "hermit-abi 0.2.6", - "io-lifetimes", - "rustix", - "windows-sys 0.42.0", -] +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "itertools" -version = "0.10.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] @@ -1324,28 +1473,29 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.58" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "jsonrpc" -version = "0.12.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f8423b78fc94d12ef1a4a9d13c348c9a78766dda0cc18817adf0faf77e670c8" +checksum = "3662a38d341d77efecb73caf01420cfa5aa63c0253fd7bc05289ef9f6616e1bf" dependencies = [ - "base64-compat", + "base64 0.13.1", + "minreq", "serde", - "serde_derive", "serde_json", ] @@ -1399,9 +1549,12 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.0" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures 0.2.17", +] [[package]] name = "kernel32-sys" @@ -1415,15 +1568,21 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.151" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libsqlite3-sys" @@ -1438,64 +1597,99 @@ dependencies = [ [[package]] name = "lightning" -version = "0.0.108" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d885bf509066af86ae85354c8959028ad6192c22a2657ef8271e94029d30f9d0" +checksum = "b3224b577def19c2bb3dcf2c35a95d94909183204c061746d1245ecc6e889e8e" dependencies = [ + "bech32", "bitcoin", + "dnssec-prover", + "hashbrown 0.13.2", + "libm", + "lightning-invoice", + "lightning-types", + "possiblyrandom", ] [[package]] name = "lightning-block-sync" -version = "0.0.108" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f1ed50f41785af19f5cd1225b668e87ef0d59bb84e6f8ef2542933e6082a2c" +checksum = "baab5bdee174a2047d939a4ca0dc2e1c23caa0f8cab0b4380aed77a20e116f1e" dependencies = [ "bitcoin", "chunked_transfer", - "futures", "lightning", - "serde", "serde_json", ] [[package]] -name = "lightning-net-tokio" -version = "0.0.108" +name = "lightning-invoice" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0170619152c4d6b947d5ed0de427b85691482a293e0cae52d4336a2220a776" +checksum = "d4254e7d05961a3728bc90737c522e7091735ba6f2f71014096d4b3eb4ee5d89" +dependencies = [ + "bech32", + "bitcoin", + "lightning-types", +] + +[[package]] +name = "lightning-net-tokio" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6a6c93b1e592f1d46bb24233cac4a33b4015c99488ee229927a81d16226e45" dependencies = [ "bitcoin", "lightning", - "tokio 1.36.0", + "tokio 1.43.0", +] + +[[package]] +name = "lightning-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cd84d4e71472035903e43caded8ecc123066ce466329ccd5ae537a8d5488c7" +dependencies = [ + "bitcoin", ] [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.21" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] -name = "matches" -version = "0.1.9" +name = "matchers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] [[package]] name = "matchit" @@ -1505,21 +1699,21 @@ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", @@ -1533,11 +1727,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", +] + +[[package]] +name = "minreq" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0c420feb01b9fb5061f8c8f452534361dd783756dcf38ec45191ce55e7a161" +dependencies = [ + "log", + "serde", + "serde_json", ] [[package]] @@ -1561,13 +1766,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1584,16 +1789,14 @@ dependencies = [ [[package]] name = "mockito" -version = "0.32.4" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fa08cccbc31b07113e4322d79df4464e0ed888032fc67ec56136325cd3afecf" +checksum = "406f43768da5a859ce19bb0978fd8dc2167a7d9a52f3935c6a187242e1a4ff9f" dependencies = [ "assert-json-diff", - "async-trait", "colored", - "deadpool", "futures", - "hyper 0.14.28", + "hyper 0.14.32", "lazy_static", "log", "rand 0.8.5", @@ -1601,7 +1804,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "similar", - "tokio 1.36.0", + "tokio 1.43.0", ] [[package]] @@ -1610,10 +1813,10 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" dependencies = [ - "bytes 1.1.0", + "bytes 1.9.0", "encoding_rs", "futures-util", - "http", + "http 0.2.12", "httparse", "log", "memchr", @@ -1624,17 +1827,16 @@ dependencies = [ [[package]] name = "multimap" -version = "0.8.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "native-tls" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1648,9 +1850,9 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.37" +version = "0.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" dependencies = [ "cfg-if 0.1.10", "libc", @@ -1659,21 +1861,30 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] [[package]] -name = "num-bigint" -version = "0.4.3" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -1686,79 +1897,78 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi 0.3.9", "libc", ] [[package]] name = "num_threads" -version = "0.1.3" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ba99ba6393e2c3734791401b66902d981cb03bf190af674ca69949b6d5fb15" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ "libc", ] [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "oid-registry" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" dependencies = [ "asn1-rs", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.40" +version = "0.10.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" +checksum = "f5e534d133a060a3c19daec1eb3e98ec6f4685978834f2dbadfe2ec215bab64e" dependencies = [ - "bitflags", + "bitflags 2.8.0", "cfg-if 1.0.0", "foreign-types", "libc", @@ -1769,34 +1979,39 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.96", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.74" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ - "autocfg", "cc", "libc", "pkg-config", "vcpkg", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "parking_lot" version = "0.11.2" @@ -1805,90 +2020,90 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.6", + "parking_lot_core 0.9.10", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "winapi 0.3.9", ] [[package]] name = "parking_lot_core" -version = "0.9.6" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.5.8", "smallvec", - "windows-sys 0.42.0", + "windows-targets 0.52.6", ] [[package]] name = "pem" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" dependencies = [ - "base64 0.21.2", + "base64 0.22.1", "serde", ] [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 1.8.0", + "indexmap 2.7.1", ] [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] @@ -1899,9 +2114,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1911,9 +2126,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.24" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "poly1305" @@ -1921,11 +2136,20 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ - "cpufeatures 0.2.1", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] +[[package]] +name = "possiblyrandom" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b122a615d72104fb3d8b26523fdf9232cd8ee06949fb37e4ce3ff964d15dffd" +dependencies = [ + "getrandom 0.2.15", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1934,18 +2158,21 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "prettyplease" -version = "0.2.15" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] @@ -1957,7 +2184,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", "version_check", ] @@ -1974,31 +2201,31 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.71" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "prost" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ - "bytes 1.1.0", + "bytes 1.9.0", "prost-derive", ] [[package]] name = "prost-build" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ - "bytes 1.1.0", - "heck 0.4.1", + "bytes 1.9.0", + "heck 0.5.0", "itertools", "log", "multimap", @@ -2008,38 +2235,37 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.43", + "syn 2.0.96", "tempfile", - "which", ] [[package]] name = "prost-derive" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] name = "prost-types" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ "prost", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2078,7 +2304,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -2098,7 +2324,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -2127,11 +2353,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", ] [[package]] @@ -2145,9 +2371,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ "pem", "ring", @@ -2168,41 +2394,65 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.8.0", ] [[package]] name = "regex" -version = "1.10.3" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ - "aho-corasick 1.1.3", + "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "aho-corasick 1.1.3", + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "remove_dir_all" @@ -2215,32 +2465,35 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.11" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64 0.13.0", - "bytes 1.1.0", + "base64 0.21.7", + "bytes 1.9.0", "encoding_rs", "futures-core", "futures-util", - "h2 0.3.25", - "http", + "h2 0.3.26", + "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.32", "hyper-tls", "ipnet", "js-sys", - "lazy_static", "log", "mime", "native-tls", + "once_cell", "percent-encoding", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.16", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", - "tokio 1.36.0", + "sync_wrapper", + "system-configuration", + "tokio 1.43.0", "tokio-native-tls", "tokio-socks", "tower-service", @@ -2251,24 +2504,19 @@ dependencies = [ "winreg", ] -[[package]] -name = "retain_mut" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0" - [[package]] name = "ring" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", - "getrandom 0.2.11", + "cfg-if 1.0.0", + "getrandom 0.2.15", "libc", "spin", "untrusted", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2277,7 +2525,7 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ba4d3462c8b2e4d7f4fcfcf2b296dc6b65404fbbc7b63daa37fd485c149daf7" dependencies = [ - "bitflags", + "bitflags 1.3.2", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -2288,15 +2536,15 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -2312,23 +2560,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.6" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags", + "bitflags 2.8.0", "errno", - "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.42.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.22.2" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", "ring", @@ -2340,34 +2587,33 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.2", + "base64 0.21.7", ] [[package]] name = "rustls-pemfile" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f48172685e6ff52a556baa527774f61fcaa884f59daf3375c62a3f1cd2549dab" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.21.2", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" -version = "0.102.2" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -2376,64 +2622,65 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "windows-sys 0.59.0", ] [[package]] name = "scoped-tls" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "secp256k1" -version = "0.22.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26947345339603ae8395f68e2f3d85a6b0a8ddfe6315818e80b8504415099db0" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", "secp256k1-sys", "serde", ] [[package]] name = "secp256k1-sys" -version = "0.5.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "152e20a0fd0519390fc43ab404663af8a0b794273d2a91d60ad4a39f13ffe110" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ "cc", ] [[package]] name = "security-framework" -version = "2.6.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -2442,9 +2689,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2452,38 +2699,39 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.9" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.193" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ - "indexmap 1.8.0", - "itoa 1.0.10", + "indexmap 2.7.1", + "itoa 1.0.14", + "memchr", "ryu", "serde", ] @@ -2495,30 +2743,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.10", + "itoa 1.0.14", "ryu", "serde", ] -[[package]] -name = "sha-1" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures 0.2.1", - "digest 0.10.7", -] - [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if 1.0.0", - "cpufeatures 0.2.1", + "cpufeatures 0.2.17", "digest 0.10.7", ] @@ -2530,7 +2767,7 @@ checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpufeatures 0.2.1", + "cpufeatures 0.2.17", "digest 0.9.0", "opaque-debug", ] @@ -2548,31 +2785,46 @@ dependencies = [ ] [[package]] -name = "signal-hook-registry" -version = "1.4.0" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] [[package]] name = "signature" -version = "1.5.0" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" [[package]] name = "similar" -version = "2.2.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" [[package]] name = "simple_logger" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75a9723083573ace81ad0cdfc50b858aa3c366c48636edb4109d73122a0c0ea" +checksum = "48047e77b528151aaf841a10a9025f9459da80ba820e425ff7eb005708a76dc7" dependencies = [ "atty", "colored", @@ -2583,15 +2835,18 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.5" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.8.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" @@ -2606,9 +2861,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2620,6 +2875,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.8.0" @@ -2647,20 +2908,20 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -2669,9 +2930,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.43" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -2684,18 +2945,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.98", - "unicode-xid", -] - [[package]] name = "synstructure" version = "0.13.1" @@ -2704,7 +2953,28 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -2719,22 +2989,23 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if 1.0.0", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi 0.3.9", + "getrandom 0.3.1", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] name = "teos" version = "0.2.0" dependencies = [ + "base64 0.22.1", "bitcoin", "bitcoincore-rpc", "hex", @@ -2754,7 +3025,7 @@ dependencies = [ "structopt", "tempdir", "teos-common", - "tokio 1.36.0", + "tokio 1.43.0", "tokio-stream", "toml", "tonic", @@ -2781,15 +3052,6 @@ dependencies = [ "tonic-build", ] -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - [[package]] name = "textwrap" version = "0.11.0" @@ -2801,32 +3063,42 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.96", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", - "itoa 1.0.10", + "itoa 1.0.14", "libc", "num-conv", "num_threads", @@ -2844,29 +3116,24 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] [[package]] -name = "tinyvec" -version = "1.5.1" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - [[package]] name = "tokio" version = "0.2.25" @@ -2887,21 +3154,20 @@ dependencies = [ [[package]] name = "tokio" -version = "1.36.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", - "bytes 1.1.0", + "bytes 1.9.0", "libc", - "mio 0.8.11", - "num_cpus", - "parking_lot 0.12.1", - "pin-project-lite 0.2.13", + "mio 1.0.3", + "parking_lot 0.12.3", + "pin-project-lite 0.2.16", "signal-hook-registry", - "socket2 0.5.6", + "socket2 0.5.8", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2910,29 +3176,29 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" dependencies = [ - "pin-project-lite 0.2.13", - "tokio 1.36.0", + "pin-project-lite 0.2.16", + "tokio 1.43.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", - "tokio 1.36.0", + "tokio 1.43.0", ] [[package]] @@ -2943,41 +3209,41 @@ checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ "rustls", "rustls-pki-types", - "tokio 1.36.0", + "tokio 1.43.0", ] [[package]] name = "tokio-socks" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", "thiserror", - "tokio 1.36.0", + "tokio 1.43.0", ] [[package]] name = "tokio-stream" -version = "0.1.8" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", - "pin-project-lite 0.2.13", - "tokio 1.36.0", + "pin-project-lite 0.2.16", + "tokio 1.43.0", ] [[package]] name = "tokio-tungstenite" -version = "0.18.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" +checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" dependencies = [ "futures-util", "log", - "tokio 1.36.0", + "tokio 1.43.0", "tungstenite", ] @@ -2997,23 +3263,22 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ - "bytes 1.1.0", + "bytes 1.9.0", "futures-core", "futures-sink", - "pin-project-lite 0.2.13", - "tokio 1.36.0", - "tracing", + "pin-project-lite 0.2.16", + "tokio 1.43.0", ] [[package]] name = "toml" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -3027,19 +3292,19 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.21.2", - "bytes 1.1.0", - "h2 0.3.25", - "http", + "base64 0.21.7", + "bytes 1.9.0", + "h2 0.3.26", + "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.32", "hyper-timeout", "percent-encoding", "pin-project", "prost", - "rustls-pemfile 2.1.1", + "rustls-pemfile 2.2.0", "rustls-pki-types", - "tokio 1.36.0", + "tokio 1.43.0", "tokio-rustls", "tokio-stream", "tower", @@ -3058,7 +3323,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] @@ -3068,7 +3333,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99febc413f26cf855b3a309c5872edff5c31e0ffe9c2fce5681868761df36f69" dependencies = [ "base32", - "base64 0.13.0", + "base64 0.13.1", "derive_more", "ed25519-dalek", "hex", @@ -3078,7 +3343,7 @@ dependencies = [ "serde_derive", "sha2", "sha3", - "tokio 1.36.0", + "tokio 1.43.0", ] [[package]] @@ -3089,13 +3354,13 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "indexmap 1.8.0", + "indexmap 1.9.3", "pin-project", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.16", "rand 0.8.5", "slab", - "tokio 1.36.0", - "tokio-util 0.7.10", + "tokio 1.43.0", + "tokio-util 0.7.13", "tower-layer", "tower-service", "tracing", @@ -3103,46 +3368,47 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.16", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.96", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", + "valuable", ] [[package]] @@ -3155,6 +3421,35 @@ dependencies = [ "tracing", ] +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + [[package]] name = "triggered" version = "0.1.2" @@ -3163,20 +3458,20 @@ checksum = "ce148eae0d1a376c1b94ae651fc3261d9cb8294788b962b7382066376503a2d1" [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.18.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" dependencies = [ - "base64 0.13.0", "byteorder", - "bytes 1.1.0", - "http", + "bytes 1.9.0", + "data-encoding", + "http 1.2.0", "httparse", "log", "rand 0.8.5", @@ -3188,57 +3483,33 @@ dependencies = [ [[package]] name = "typenum" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicase" -version = "2.6.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" - -[[package]] -name = "unicode-normalization" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-segmentation" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "universal-hash" @@ -3258,13 +3529,12 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.2.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] @@ -3274,6 +3544,24 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vcpkg" version = "0.2.15" @@ -3288,47 +3576,44 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] [[package]] name = "warp" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69" +checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" dependencies = [ - "bytes 1.1.0", + "bytes 1.9.0", "futures-channel", "futures-util", "headers", - "http", - "hyper 0.14.28", + "http 0.2.12", + "hyper 0.14.32", "log", "mime", "mime_guess", "multer", "percent-encoding", "pin-project", - "rustls-pemfile 1.0.3", "scoped-tls", "serde", "serde_json", "serde_urlencoded", - "tokio 1.36.0", - "tokio-stream", + "tokio 1.43.0", "tokio-tungstenite", - "tokio-util 0.7.10", + "tokio-util 0.7.13", "tower-service", "tracing", ] @@ -3346,47 +3631,58 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "wasm-bindgen" -version = "0.2.81" +name = "wasi" +version = "0.13.3+wasi-0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if 1.0.0", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.81" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", - "lazy_static", "log", "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.31" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if 1.0.0", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.81" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3394,22 +3690,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.81" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.81" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "watchtower-plugin" @@ -3428,31 +3727,20 @@ dependencies = [ "serde_json", "tempdir", "teos-common", - "tokio 1.36.0", + "tokio 1.43.0", "tonic", ] [[package]] name = "web-sys" -version = "0.3.58" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "which" -version = "4.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5a7e487e921cf220206864a94a89b6c6905bfc19f1057fa26a4cb360e5c1d2" -dependencies = [ - "either", - "lazy_static", - "libc", -] - [[package]] name = "winapi" version = "0.2.8" @@ -3481,49 +3769,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.0", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm 0.42.0", - "windows_x86_64_msvc 0.42.0", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -3539,7 +3790,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3559,25 +3819,20 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -3586,21 +3841,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3610,21 +3853,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3634,21 +3865,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "windows_i686_msvc" -version = "0.36.1" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3658,21 +3883,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3682,15 +3895,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3700,21 +3907,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3724,19 +3919,41 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.4" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi 0.3.9", + "cfg-if 1.0.0", + "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "ws2_32-sys" version = "0.2.1" @@ -3775,22 +3992,109 @@ dependencies = [ ] [[package]] -name = "zeroize" -version = "1.7.0" +name = "yoke" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", - "synstructure 0.12.6", + "syn 2.0.96", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", ] diff --git a/Cargo.toml b/Cargo.toml index 76af6ed..a070916 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,4 @@ members = [ "teos", "teos-common", "watchtower-plugin" -] \ No newline at end of file +] diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index 4efa204..3ea5e11 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -6,7 +6,7 @@ - `bitcoind` ### Minimum Supported Rust Version (MSRV) -FIXME: Define MSRV +Refer to [toolchain](./rust-toolchain.toml) ### Installing Rust Refer to [rust-lang.org](https://www.rust-lang.org/tools/install). diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..8a95a07 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,6 @@ +[toolchain] +channel = "1.81.0" +components = [ + "rustfmt", + "clippy", +] diff --git a/teos-common/Cargo.toml b/teos-common/Cargo.toml index 1776689..14a45d4 100644 --- a/teos-common/Cargo.toml +++ b/teos-common/Cargo.toml @@ -20,8 +20,8 @@ rand = "0.8.4" chacha20poly1305 = "0.8.0" # Bitcoin and Lightning -bitcoin = { version = "0.28.0", features = [ "use-serde" ] } -lightning = "0.0.108" +bitcoin = { version = "0.32.0", features = [ "serde" ] } +lightning = "0.1.0" [build-dependencies] -tonic-build = "0.11" \ No newline at end of file +tonic-build = "0.11" diff --git a/teos-common/src/cryptography.rs b/teos-common/src/cryptography.rs index cf5fef3..5dee477 100644 --- a/teos-common/src/cryptography.rs +++ b/teos-common/src/cryptography.rs @@ -1,10 +1,9 @@ //! Cryptography module, used in the interaction between users and towers. -use rand::distributions::Uniform; -use rand::Rng; - use chacha20poly1305::aead::{Aead, NewAead}; use chacha20poly1305::{ChaCha20Poly1305, Key, Nonce}; +use rand::distributions::Uniform; +use rand::Rng; use bitcoin::consensus; use bitcoin::hashes::{sha256, Hash}; @@ -20,7 +19,7 @@ pub enum DecryptingError { } /// Shadows [message_signing::sign]. -pub fn sign(msg: &[u8], sk: &SecretKey) -> Result { +pub fn sign(msg: &[u8], sk: &SecretKey) -> String { message_signing::sign(msg, sk) } @@ -47,8 +46,8 @@ pub fn encrypt( ) -> Result, chacha20poly1305::aead::Error> { // Defaults is [0; 12] let nonce = Nonce::default(); - let _k = sha256::Hash::hash(secret); - let key = Key::from_slice(&_k); + let k = sha256::Hash::hash(secret.as_byte_array()); + let key = Key::from_slice(k.as_byte_array()); let cypher = ChaCha20Poly1305::new(key); cypher.encrypt(&nonce, consensus::serialize(message).as_ref()) @@ -64,8 +63,8 @@ pub fn encrypt( pub fn decrypt(encrypted_blob: &[u8], secret: &Txid) -> Result { // Defaults is [0; 12] let nonce = Nonce::default(); - let _k = sha256::Hash::hash(secret); - let key = Key::from_slice(&_k); + let k = sha256::Hash::hash(secret.as_byte_array()); + let key = Key::from_slice(k.as_byte_array()); let cypher = ChaCha20Poly1305::new(key); @@ -95,6 +94,8 @@ pub fn get_random_keypair() -> (SecretKey, PublicKey) { #[cfg(test)] mod tests { + use std::str::FromStr; + use super::*; use bitcoin::consensus; use bitcoin::hashes::hex::FromHex; @@ -108,8 +109,8 @@ mod tests { let expected_enc_blob = Vec::from_hex(ENC_BLOB).unwrap(); let tx_bytes = Vec::from_hex(HEX_TX).unwrap(); - let tx = consensus::deserialize(&tx_bytes).unwrap(); - let txid = Txid::from_hex(HEX_TXID).unwrap(); + let tx: Transaction = consensus::deserialize(&tx_bytes).unwrap(); + let txid = bitcoin::Txid::from_str(HEX_TXID).unwrap(); assert_eq!(encrypt(&tx, &txid).unwrap(), expected_enc_blob); } @@ -118,7 +119,7 @@ mod tests { let expected_tx = consensus::deserialize(&Vec::from_hex(HEX_TX).unwrap()).unwrap(); let encrypted_blob = Vec::from_hex(ENC_BLOB).unwrap(); - let txid = Txid::from_hex(HEX_TXID).unwrap(); + let txid = bitcoin::Txid::from_str(HEX_TXID).unwrap(); assert_eq!(decrypt(&encrypted_blob, &txid).unwrap(), expected_tx); } } diff --git a/teos-common/src/receipts.rs b/teos-common/src/receipts.rs index 699c3c5..5dc0e00 100644 --- a/teos-common/src/receipts.rs +++ b/teos-common/src/receipts.rs @@ -92,8 +92,7 @@ impl RegistrationReceipt { } pub fn sign(&mut self, sk: &SecretKey) { - // TODO: Check if there's any case where this can actually fail. Don't unwrap if so. - self.signature = Some(cryptography::sign(&self.to_vec(), sk).unwrap()); + self.signature = Some(cryptography::sign(&self.to_vec(), sk)); } pub fn verify(&self, id: &UserId) -> bool { @@ -153,8 +152,7 @@ impl AppointmentReceipt { } pub fn sign(&mut self, sk: &SecretKey) { - // TODO: Check if there's any case where this can actually fail. Don't unwrap if so. - self.signature = Some(cryptography::sign(&self.to_vec(), sk).unwrap()); + self.signature = Some(cryptography::sign(&self.to_vec(), sk)); } pub fn verify(&self, id: &UserId) -> bool { diff --git a/teos-common/src/test_utils.rs b/teos-common/src/test_utils.rs index 0b5a95b..4bd5cb9 100644 --- a/teos-common/src/test_utils.rs +++ b/teos-common/src/test_utils.rs @@ -1,5 +1,6 @@ use std::convert::TryInto; +use bitcoin::script::PushBytesBuf; use hex::FromHex; use rand::distributions::Standard; use rand::prelude::Distribution; @@ -7,7 +8,7 @@ use rand::Rng; use bitcoin::hashes::Hash; use bitcoin::secp256k1::SecretKey; -use bitcoin::{consensus, Script, Transaction, TxOut, Txid}; +use bitcoin::{consensus, Amount, ScriptBuf, Transaction, TxOut, Txid}; use crate::appointment::{Appointment, Locator}; use crate::cryptography; @@ -48,13 +49,16 @@ pub fn generate_random_appointment(dispute_txid: Option<&Txid>) -> Appointment { let tx_bytes = Vec::from_hex(TX_HEX).unwrap(); let mut penalty_tx: Transaction = consensus::deserialize(&tx_bytes).unwrap(); + let size = get_random_int::() % 81; + let mut push_bytes_buf = PushBytesBuf::new(); + PushBytesBuf::extend_from_slice(&mut push_bytes_buf, &cryptography::get_random_bytes(size)) + .unwrap(); + let script_pubkey = ScriptBuf::new_op_return(push_bytes_buf); // Append a random-sized OP_RETURN to make each transcation random in size. penalty_tx.output.push(TxOut { - value: 0, - script_pubkey: Script::new_op_return(&cryptography::get_random_bytes( - get_random_int::() % 81, - )), + value: Amount::from_sat(0), + script_pubkey, }); let mut raw_locator: [u8; 16] = cryptography::get_random_bytes(16).try_into().unwrap(); diff --git a/teos/Cargo.toml b/teos/Cargo.toml index 0fe9339..287b0aa 100644 --- a/teos/Cargo.toml +++ b/teos/Cargo.toml @@ -32,13 +32,14 @@ tokio = { version = "1.5", features = [ "rt-multi-thread" ] } triggered = "0.1.2" warp = "0.3.5" torut = "0.2.1" +base64 = "0.22.1" # Bitcoin and Lightning -bitcoin = { version = "0.28.0", features = [ "base64" ] } -bitcoincore-rpc = "0.15.0" -lightning = "0.0.108" -lightning-net-tokio = "0.0.108" -lightning-block-sync = { version = "0.0.108", features = [ "rpc-client" ] } +bitcoin = { version = "0.32.0" } +bitcoincore-rpc = "0.19.0" +lightning = "0.1.0" +lightning-net-tokio = "0.1.0" +lightning-block-sync = { version = "0.1.0", features = [ "rpc-client" ] } # Local teos-common = { path = "../teos-common" } diff --git a/teos/src/api/http.rs b/teos/src/api/http.rs index a041ee3..949c08b 100644 --- a/teos/src/api/http.rs +++ b/teos/src/api/http.rs @@ -767,7 +767,7 @@ mod tests_methods { // Then try to add an appointment let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); let response = request_to_api::< common_msgs::AddAppointmentRequest, @@ -793,7 +793,7 @@ mod tests_methods { let (server_addr, _s) = run_tower_in_background().await; let (user_sk, _s) = cryptography::get_random_keypair(); let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); assert_eq!( check_api_error( @@ -845,8 +845,8 @@ mod tests_methods { .add_dummy_tracker_to_responder(&tracker); // Try to add it via the http API - let appointment = generate_dummy_appointment(Some(&dispute_tx.txid())).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let appointment = generate_dummy_appointment(Some(&dispute_tx.compute_txid())).inner; + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); assert_eq!( check_api_error( Endpoint::AddAppointment, @@ -875,7 +875,7 @@ mod tests_methods { .await; let (user_sk, _) = cryptography::get_random_keypair(); let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); assert_eq!( check_api_error( @@ -915,7 +915,7 @@ mod tests_methods { // Add an appointment let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); request_to_api::( Endpoint::AddAppointment, @@ -939,8 +939,7 @@ mod tests_methods { signature: cryptography::sign( format!("get appointment {}", appointment.locator).as_bytes(), &user_sk, - ) - .unwrap(), + ), }, server_addr, ) @@ -970,7 +969,6 @@ mod tests_methods { format!("get appointment {}", appointment.locator).as_bytes(), &user_sk, ) - .unwrap() })), server_addr, ) @@ -1013,7 +1011,6 @@ mod tests_methods { format!("get appointment {}", appointment.locator).as_bytes(), &user_sk, ) - .unwrap() })), server_addr, ) @@ -1048,7 +1045,6 @@ mod tests_methods { format!("get appointment {}", appointment.locator).as_bytes(), &user_sk, ) - .unwrap() })), server_addr, ) @@ -1086,8 +1082,7 @@ mod tests_methods { >( Endpoint::GetSubscriptionInfo, common_msgs::GetSubscriptionInfoRequest { - signature: cryptography::sign("get subscription info".as_bytes(), &user_sk) - .unwrap(), + signature: cryptography::sign("get subscription info".as_bytes(), &user_sk), }, server_addr, ) @@ -1111,7 +1106,6 @@ mod tests_methods { Endpoint::GetSubscriptionInfo, RequestBody::Json(serde_json::json!(common_msgs::GetSubscriptionInfoRequest { signature: cryptography::sign("get subscription info".as_bytes(), &user_sk) - .unwrap(), })), server_addr, ) @@ -1139,7 +1133,6 @@ mod tests_methods { Endpoint::GetSubscriptionInfo, RequestBody::Json(serde_json::json!(common_msgs::GetSubscriptionInfoRequest { signature: cryptography::sign("get subscription info".as_bytes(), &user_sk) - .unwrap(), })), server_addr, ) diff --git a/teos/src/api/internal.rs b/teos/src/api/internal.rs index fc2085d..8a1e1ea 100644 --- a/teos/src/api/internal.rs +++ b/teos/src/api/internal.rs @@ -466,7 +466,7 @@ mod tests_private_api { internal_api.watcher.register(UserId(user_pk)).unwrap(); let appointment = generate_dummy_appointment(None).inner; - let user_signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let user_signature = cryptography::sign(&appointment.to_vec(), &user_sk); internal_api .watcher .add_appointment(appointment.clone(), user_signature) @@ -509,7 +509,7 @@ mod tests_private_api { async fn test_get_appointments() { let (internal_api, _s) = create_api().await; - let locator = Locator::new(get_random_tx().txid()).to_vec(); + let locator = Locator::new(get_random_tx().compute_txid()).to_vec(); let response = internal_api .get_appointments(Request::new(msgs::GetAppointmentsRequest { locator })) .await @@ -525,7 +525,7 @@ mod tests_private_api { for i in 0..3 { // Create a dispute tx to be used for creating different dummy appointments with the same locator. - let dispute_txid = get_random_tx().txid(); + let dispute_txid = get_random_tx().compute_txid(); // The number of different appointments to create for this dispute tx. let appointments_to_create = 4 * i + 7; @@ -535,7 +535,7 @@ mod tests_private_api { let (user_sk, user_pk) = get_random_keypair(); internal_api.watcher.register(UserId(user_pk)).unwrap(); let appointment = generate_dummy_appointment(Some(&dispute_txid)).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); internal_api .watcher .add_appointment(appointment, signature) @@ -593,7 +593,7 @@ mod tests_private_api { .add_dummy_tracker_to_responder(&tracker); } - let locator = Locator::new(dispute_tx.txid()); + let locator = Locator::new(dispute_tx.compute_txid()); // Query for the current locator and assert it retrieves correct trackers. let response = internal_api @@ -648,7 +648,7 @@ mod tests_private_api { // Add data to the Watcher for _ in 0..2 { let appointment = generate_dummy_appointment(None).inner; - let user_signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let user_signature = cryptography::sign(&appointment.to_vec(), &user_sk); internal_api .watcher .add_appointment(appointment.clone(), user_signature) @@ -731,7 +731,7 @@ mod tests_private_api { // Add an appointment and check back let (uuid, appointment) = generate_dummy_appointment_with_user(user_id, None); - let user_signature = cryptography::sign(&appointment.inner.to_vec(), &user_sk).unwrap(); + let user_signature = cryptography::sign(&appointment.inner.to_vec(), &user_sk); internal_api .watcher .add_appointment(appointment.inner, user_signature) @@ -901,7 +901,7 @@ mod tests_public_api { internal_api.watcher.register(UserId(user_pk)).unwrap(); let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); let response = internal_api .add_appointment(Request::new(common_msgs::AddAppointmentRequest { @@ -926,7 +926,7 @@ mod tests_public_api { let (user_sk, _) = get_random_keypair(); let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); match internal_api .add_appointment(Request::new(common_msgs::AddAppointmentRequest { @@ -955,7 +955,7 @@ mod tests_public_api { internal_api.watcher.register(UserId(user_pk)).unwrap(); let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); match internal_api .add_appointment(Request::new(common_msgs::AddAppointmentRequest { @@ -984,7 +984,7 @@ mod tests_public_api { internal_api.watcher.register(UserId(user_pk)).unwrap(); let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); match internal_api .add_appointment(Request::new(common_msgs::AddAppointmentRequest { @@ -1021,8 +1021,8 @@ mod tests_public_api { .add_dummy_tracker_to_responder(&tracker); // Try to add it again using the API. - let appointment = generate_dummy_appointment(Some(&dispute_tx.txid())).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let appointment = generate_dummy_appointment(Some(&dispute_tx.compute_txid())).inner; + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); match internal_api .add_appointment(Request::new(common_msgs::AddAppointmentRequest { appointment: Some(appointment.into()), @@ -1047,7 +1047,7 @@ mod tests_public_api { let (user_sk, _) = get_random_keypair(); let appointment = generate_dummy_appointment(None).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); match internal_api .add_appointment(Request::new(common_msgs::AddAppointmentRequest { @@ -1074,7 +1074,7 @@ mod tests_public_api { // Add the appointment let appointment = generate_dummy_appointment(None).inner; - let user_signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let user_signature = cryptography::sign(&appointment.to_vec(), &user_sk); internal_api .watcher .add_appointment(appointment.clone(), user_signature) @@ -1085,7 +1085,7 @@ mod tests_public_api { let response = internal_api .get_appointment(Request::new(common_msgs::GetAppointmentRequest { locator: appointment.locator.to_vec(), - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await .unwrap() @@ -1113,7 +1113,7 @@ mod tests_public_api { match internal_api .get_appointment(Request::new(common_msgs::GetAppointmentRequest { locator: appointment.locator.to_vec(), - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await { @@ -1140,7 +1140,7 @@ mod tests_public_api { match internal_api .get_appointment(Request::new(common_msgs::GetAppointmentRequest { locator: appointment.locator.to_vec(), - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await { @@ -1168,7 +1168,7 @@ mod tests_public_api { match internal_api .get_appointment(Request::new(common_msgs::GetAppointmentRequest { locator: appointment.locator.to_vec(), - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await { @@ -1191,7 +1191,7 @@ mod tests_public_api { match internal_api .get_appointment(Request::new(common_msgs::GetAppointmentRequest { locator: appointment.locator.to_vec(), - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await { @@ -1215,7 +1215,7 @@ mod tests_public_api { let message = "get subscription info".to_string(); let response = internal_api .get_subscription_info(Request::new(common_msgs::GetSubscriptionInfoRequest { - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await .unwrap() @@ -1238,7 +1238,7 @@ mod tests_public_api { let message = "get subscription info".to_string(); match internal_api .get_subscription_info(Request::new(common_msgs::GetSubscriptionInfoRequest { - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await { @@ -1262,7 +1262,7 @@ mod tests_public_api { let message = "get subscription info".to_string(); match internal_api .get_subscription_info(Request::new(common_msgs::GetSubscriptionInfoRequest { - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await { @@ -1283,7 +1283,7 @@ mod tests_public_api { let message = "get subscription info".to_string(); match internal_api .get_subscription_info(Request::new(common_msgs::GetSubscriptionInfoRequest { - signature: cryptography::sign(message.as_bytes(), &user_sk).unwrap(), + signature: cryptography::sign(message.as_bytes(), &user_sk), })) .await { diff --git a/teos/src/bitcoin_cli.rs b/teos/src/bitcoin_cli.rs index 22b5338..4b73bde 100644 --- a/teos/src/bitcoin_cli.rs +++ b/teos/src/bitcoin_cli.rs @@ -9,20 +9,19 @@ * at your option. */ +use base64::{engine::general_purpose::URL_SAFE as BASE64, Engine}; use std::convert::TryInto; use std::io::{Error, ErrorKind}; use std::sync::Arc; use tokio::sync::Mutex; -use bitcoin::base64; use bitcoin::hash_types::{BlockHash, Txid}; -use bitcoin::hashes::hex::ToHex; -use bitcoin::{Block, Transaction}; -use bitcoincore_rpc::Auth; +use bitcoin::Transaction; +use bitcoincore_rpc::{Auth, RawTx}; use lightning::util::ser::Writeable; use lightning_block_sync::http::{HttpEndpoint, JsonResponse}; use lightning_block_sync::rpc::RpcClient; -use lightning_block_sync::{AsyncBlockSourceResult, BlockHeaderData, BlockSource}; +use lightning_block_sync::{AsyncBlockSourceResult, BlockData, BlockHeaderData, BlockSource}; /// A simple implementation of a bitcoind client (`bitcoin-cli`) with the minimal functionality required by the tower. pub struct BitcoindClient<'a> { @@ -52,7 +51,10 @@ impl BlockSource for &BitcoindClient<'_> { } /// Gets a block given its hash. - fn get_block<'a>(&'a self, header_hash: &'a BlockHash) -> AsyncBlockSourceResult<'a, Block> { + fn get_block<'a>( + &'a self, + header_hash: &'a BlockHash, + ) -> AsyncBlockSourceResult<'a, BlockData> { Box::pin(async move { let rpc = self.bitcoind_rpc_client.lock().await; rpc.get_block(header_hash).await @@ -101,8 +103,8 @@ impl<'a> BitcoindClient<'a> { } }?; - let rpc_credentials = base64::encode(&format!("{}:{}", rpc_user, rpc_password)); - let bitcoind_rpc_client = RpcClient::new(&rpc_credentials, http_endpoint)?; + let rpc_credentials = BASE64.encode(format!("{}:{}", rpc_user, rpc_password)); + let bitcoind_rpc_client = RpcClient::new(&rpc_credentials, http_endpoint); let client = Self { bitcoind_rpc_client: Arc::new(Mutex::new(bitcoind_rpc_client)), @@ -127,9 +129,10 @@ impl<'a> BitcoindClient<'a> { } /// Gets a fresh RPC client. - pub fn get_new_rpc_client(&self) -> std::io::Result { + pub fn get_new_rpc_client(&self) -> RpcClient { let http_endpoint = HttpEndpoint::for_host(self.host.to_owned()).with_port(self.port); - let rpc_credentials = base64::encode(&format!("{}:{}", self.rpc_user, self.rpc_password)); + let rpc_credentials = BASE64.encode(format!("{}:{}", self.rpc_user, self.rpc_password)); + RpcClient::new(&rpc_credentials, http_endpoint) } @@ -146,7 +149,7 @@ impl<'a> BitcoindClient<'a> { pub async fn send_raw_transaction(&self, raw_tx: &Transaction) -> Result { let rpc = self.bitcoind_rpc_client.lock().await; - let raw_tx_json = serde_json::json!(raw_tx.encode().to_hex()); + let raw_tx_json = serde_json::json!(raw_tx.encode().raw_hex()); rpc.call_method::("sendrawtransaction", &[raw_tx_json]) .await } @@ -155,7 +158,7 @@ impl<'a> BitcoindClient<'a> { pub async fn get_raw_transaction(&self, txid: &Txid) -> Result { let rpc = self.bitcoind_rpc_client.lock().await; - let txid_hex = serde_json::json!(txid.encode().to_hex()); + let txid_hex = serde_json::json!(txid.encode().raw_hex()); rpc.call_method::("getrawtransaction", &[txid_hex]) .await } diff --git a/teos/src/carrier.rs b/teos/src/carrier.rs index 15c9d83..75d0fe6 100644 --- a/teos/src/carrier.rs +++ b/teos/src/carrier.rs @@ -80,17 +80,17 @@ impl Carrier { pub(crate) fn send_transaction(&mut self, tx: &Transaction) -> ConfirmationStatus { self.hang_until_bitcoind_reachable(); - if let Some(receipt) = self.issued_receipts.get(&tx.txid()) { - log::info!("Transaction already sent: {}", tx.txid()); + if let Some(receipt) = self.issued_receipts.get(&tx.compute_txid()) { + log::info!("Transaction already sent: {}", tx.compute_txid()); return *receipt; } - log::info!("Pushing transaction to the network: {}", tx.txid()); + log::info!("Pushing transaction to the network: {}", tx.compute_txid()); let receipt = match self.bitcoin_cli.send_raw_transaction(tx) { Ok(_) => { // Here the transaction could, potentially, have been in mempool before the current height. // This shouldn't really matter though. - log::info!("Transaction successfully delivered: {}", tx.txid()); + log::info!("Transaction successfully delivered: {}", tx.compute_txid()); ConfirmationStatus::InMempoolSince(self.block_height) } Err(JsonRpcError(RpcError(rpcerr))) => match rpcerr.code { @@ -106,7 +106,7 @@ impl Carrier { rpc_errors::RPC_VERIFY_ALREADY_IN_CHAIN => { log::info!( "Transaction was confirmed long ago, not keeping track of it: {}", - tx.txid() + tx.compute_txid() ); // Given we are not using txindex, if a transaction bounces we cannot get its confirmation count. However, [send_transaction] is guarded by @@ -117,7 +117,7 @@ impl Carrier { rpc_errors::RPC_DESERIALIZATION_ERROR => { // Adding this here just for completeness. We should never end up here. The Carrier only sends txs handed by the Responder, // who receives them from the Watcher, who checks that the tx can be properly deserialized. - log::info!("Transaction cannot be deserialized: {}", tx.txid()); + log::info!("Transaction cannot be deserialized: {}", tx.compute_txid()); ConfirmationStatus::Rejected(rpc_errors::RPC_DESERIALIZATION_ERROR) } _ => { @@ -139,7 +139,7 @@ impl Carrier { } }; - self.issued_receipts.insert(tx.txid(), receipt); + self.issued_receipts.insert(tx.compute_txid(), receipt); receipt } @@ -184,6 +184,7 @@ impl Carrier { #[cfg(test)] mod tests { use super::*; + use std::str::FromStr; use std::thread; use crate::test_utils::{get_random_tx, start_server, BitcoindMock, MockOptions, START_HEIGHT}; @@ -217,7 +218,7 @@ mod tests { // Lets add some dummy data into the cache for i in 0..10 { carrier.issued_receipts.insert( - get_random_tx().txid(), + get_random_tx().compute_txid(), ConfirmationStatus::ConfirmedIn(start_height - i), ); } @@ -243,7 +244,7 @@ mod tests { assert_eq!(r, ConfirmationStatus::InMempoolSince(start_height)); // Check the receipt is on the cache - assert_eq!(carrier.issued_receipts.get(&tx.txid()).unwrap(), &r); + assert_eq!(carrier.issued_receipts.get(&tx.compute_txid()).unwrap(), &r); } #[test] @@ -261,7 +262,7 @@ mod tests { assert_eq!(r, ConfirmationStatus::InMempoolSince(start_height)); // Check the receipt is on the cache - assert_eq!(carrier.issued_receipts.get(&tx.txid()).unwrap(), &r); + assert_eq!(carrier.issued_receipts.get(&tx.compute_txid()).unwrap(), &r); } #[test] @@ -284,7 +285,7 @@ mod tests { ); // Check the receipt is on the cache - assert_eq!(carrier.issued_receipts.get(&tx.txid()).unwrap(), &r); + assert_eq!(carrier.issued_receipts.get(&tx.compute_txid()).unwrap(), &r); } #[test] @@ -306,7 +307,7 @@ mod tests { ); // Check the receipt is on the cache - assert_eq!(carrier.issued_receipts.get(&tx.txid()).unwrap(), &r); + assert_eq!(carrier.issued_receipts.get(&tx.compute_txid()).unwrap(), &r); } #[test] @@ -326,7 +327,7 @@ mod tests { assert_eq!(r, ConfirmationStatus::IrrevocablyResolved); // Check the receipt is on the cache - assert_eq!(carrier.issued_receipts.get(&tx.txid()).unwrap(), &r); + assert_eq!(carrier.issued_receipts.get(&tx.compute_txid()).unwrap(), &r); } #[test] @@ -348,7 +349,7 @@ mod tests { ); // Check the receipt is on the cache - assert_eq!(carrier.issued_receipts.get(&tx.txid()).unwrap(), &r); + assert_eq!(carrier.issued_receipts.get(&tx.compute_txid()).unwrap(), &r); } #[test] @@ -389,7 +390,7 @@ mod tests { start_server(bitcoind_mock.server); let carrier = Carrier::new(bitcoin_cli, bitcoind_reachable, start_height); - let txid = Txid::from_hex(TXID_HEX).unwrap(); + let txid = Txid::from_str(TXID_HEX).unwrap(); assert!(carrier.in_mempool(&txid)); } @@ -402,7 +403,7 @@ mod tests { start_server(bitcoind_mock.server); let carrier = Carrier::new(bitcoin_cli, bitcoind_reachable, start_height); - let txid = Txid::from_hex(TXID_HEX).unwrap(); + let txid = Txid::from_str(TXID_HEX).unwrap(); assert!(!carrier.in_mempool(&txid)); } @@ -417,7 +418,7 @@ mod tests { start_server(bitcoind_mock.server); let carrier = Carrier::new(bitcoin_cli, bitcoind_reachable, start_height); - let txid = Txid::from_hex(TXID_HEX).unwrap(); + let txid = Txid::from_str(TXID_HEX).unwrap(); assert!(!carrier.in_mempool(&txid)); } @@ -431,7 +432,7 @@ mod tests { start_server(bitcoind_mock.server); let carrier = Carrier::new(bitcoin_cli, bitcoind_reachable, start_height); - let txid = Txid::from_hex(TXID_HEX).unwrap(); + let txid = Txid::from_str(TXID_HEX).unwrap(); assert!(!carrier.in_mempool(&txid)); } @@ -444,7 +445,7 @@ mod tests { let start_height = START_HEIGHT as u32; let carrier = Carrier::new(bitcoin_cli, bitcoind_reachable.clone(), start_height); - let txid = Txid::from_hex(TXID_HEX).unwrap(); + let txid = Txid::from_str(TXID_HEX).unwrap(); let delay = std::time::Duration::new(3, 0); thread::spawn(move || { diff --git a/teos/src/chain_monitor.rs b/teos/src/chain_monitor.rs index 3553401..50a690b 100644 --- a/teos/src/chain_monitor.rs +++ b/teos/src/chain_monitor.rs @@ -26,7 +26,7 @@ where { /// A bitcoin client to poll best tips from. spv_client: SpvClient<'a, P, C, L>, - /// The lat known block header by the [ChainMonitor]. + /// The last known block header by the [ChainMonitor]. last_known_block_header: ValidatedBlockHeader, /// A [DBM] (database manager) instance. Used to persist block data into disk. dbm: Arc>, @@ -135,8 +135,8 @@ mod tests { use std::iter::FromIterator; use std::thread; - use bitcoin::network::constants::Network; use bitcoin::BlockHash; + use bitcoin::Network; use lightning_block_sync::{poll::ChainPoller, SpvClient, UnboundedCache}; use crate::test_utils::{Blockchain, START_HEIGHT}; @@ -158,7 +158,7 @@ mod tests { impl chain::Listen for DummyListener { fn filtered_block_connected( &self, - header: &bitcoin::BlockHeader, + header: &bitcoin::block::Header, _: &chain::transaction::TransactionData, _: u32, ) { @@ -167,7 +167,7 @@ mod tests { .insert(header.block_hash()); } - fn block_disconnected(&self, header: &bitcoin::BlockHeader, _: u32) { + fn block_disconnected(&self, header: &bitcoin::block::Header, _: u32) { self.disconnected_blocks .borrow_mut() .insert(header.block_hash()); diff --git a/teos/src/dbm.rs b/teos/src/dbm.rs index a36c9df..7322628 100644 --- a/teos/src/dbm.rs +++ b/teos/src/dbm.rs @@ -689,7 +689,7 @@ impl DBM { // DISCUSS: Should we store the txids to avoid pulling raw txs and deserializing then hashing them. let penalty_txid = consensus::deserialize::(&raw_penalty_tx) .unwrap() - .txid(); + .compute_txid(); summaries.insert( UUID::from_slice(&raw_uuid).unwrap(), PenaltySummary::new( @@ -704,7 +704,7 @@ impl DBM { /// Stores the last known block into the database. pub(crate) fn store_last_known_block(&self, block_hash: &BlockHash) -> Result<(), Error> { let query = "INSERT OR REPLACE INTO last_known_block (id, block_hash) VALUES (0, ?)"; - self.store_data(query, params![block_hash.to_vec()]) + self.store_data(query, params![block_hash.to_byte_array().to_vec()]) } /// Loads the last known block from the database. @@ -1130,7 +1130,7 @@ mod tests { let dbm = DBM::in_memory().unwrap(); let mut appointments = HashMap::new(); let dispute_tx = get_random_tx(); - let dispute_txid = dispute_tx.txid(); + let dispute_txid = dispute_tx.compute_txid(); let locator = Locator::new(dispute_txid); for i in 1..11 { @@ -1316,7 +1316,7 @@ mod tests { let user = UserInfo::new(AVAILABLE_SLOTS, SUBSCRIPTION_START, SUBSCRIPTION_EXPIRY); let dispute_tx = get_random_tx(); - let dispute_txid = dispute_tx.txid(); + let dispute_txid = dispute_tx.compute_txid(); let mut uuids = HashSet::new(); // Add ten appointments triggered by the same locator. @@ -1336,7 +1336,7 @@ mod tests { let user_id = get_random_user_id(); dbm.store_user(user_id, &user).unwrap(); - let dispute_txid = get_random_tx().txid(); + let dispute_txid = get_random_tx().compute_txid(); let (uuid, appointment) = generate_dummy_appointment_with_user(user_id, Some(&dispute_txid)); dbm.store_appointment(uuid, &appointment).unwrap(); @@ -1516,7 +1516,7 @@ mod tests { let dbm = DBM::in_memory().unwrap(); let mut trackers = HashMap::new(); let dispute_tx = get_random_tx(); - let dispute_txid = dispute_tx.txid(); + let dispute_txid = dispute_tx.compute_txid(); let locator = Locator::new(dispute_txid); let status = ConfirmationStatus::InMempoolSince(42); @@ -1700,8 +1700,10 @@ mod tests { let tracker = get_random_tracker(user_id, status); dbm.store_tracker(uuid, &tracker).unwrap(); - penalties_summaries - .insert(uuid, PenaltySummary::new(tracker.penalty_tx.txid(), status)); + penalties_summaries.insert( + uuid, + PenaltySummary::new(tracker.penalty_tx.compute_txid(), status), + ); } assert_eq!(dbm.load_penalties_summaries(), penalties_summaries); diff --git a/teos/src/extended_appointment.rs b/teos/src/extended_appointment.rs index e7ba8f4..6545a7f 100644 --- a/teos/src/extended_appointment.rs +++ b/teos/src/extended_appointment.rs @@ -23,7 +23,7 @@ impl UUID { pub fn new(locator: Locator, user_id: UserId) -> Self { let mut uuid_data = locator.to_vec(); uuid_data.extend(user_id.0.serialize()); - UUID(ripemd160::Hash::hash(&uuid_data).into_inner()) + UUID(ripemd160::Hash::hash(&uuid_data).to_byte_array()) } /// Serializes the [UUID] returning its byte representation. diff --git a/teos/src/gatekeeper.rs b/teos/src/gatekeeper.rs index e5d490e..99e7452 100644 --- a/teos/src/gatekeeper.rs +++ b/teos/src/gatekeeper.rs @@ -297,7 +297,7 @@ impl chain::Listen for Gatekeeper { /// This is mainly used to keep track of time and expire / outdate subscriptions when needed. fn filtered_block_connected( &self, - header: &bitcoin::BlockHeader, + header: &bitcoin::block::Header, _: &chain::transaction::TransactionData, height: u32, ) { @@ -324,7 +324,7 @@ impl chain::Listen for Gatekeeper { } /// Handles reorgs in the [Gatekeeper]. Simply updates the last_known_block_height. - fn block_disconnected(&self, header: &bitcoin::BlockHeader, height: u32) { + fn block_disconnected(&self, header: &bitcoin::block::Header, height: u32) { log::warn!("Block disconnected: {}", header.block_hash()); // There's nothing to be done here but updating the last known block self.last_known_block_height @@ -435,7 +435,7 @@ mod tests { // Let's now provide data generated by an actual user, still the user is unknown let (user_sk, user_pk) = get_random_keypair(); - let signature = cryptography::sign(message, &user_sk).unwrap(); + let signature = cryptography::sign(message, &user_sk); assert_eq!( gatekeeper.authenticate_user(message, &signature), Err(AuthenticationFailure("User not found.")) diff --git a/teos/src/main.rs b/teos/src/main.rs index 8cc53c0..15c1591 100644 --- a/teos/src/main.rs +++ b/teos/src/main.rs @@ -3,13 +3,12 @@ use simple_logger::SimpleLogger; use std::fs; use std::io::ErrorKind; use std::ops::{Deref, DerefMut}; -use std::str::FromStr; use std::sync::{Arc, Condvar, Mutex}; use structopt::StructOpt; use tokio::task; use tonic::transport::{Certificate, Server, ServerTlsConfig}; -use bitcoin::network::constants::Network; +use bitcoin::network::Network; use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey}; use bitcoincore_rpc::{Auth, Client, RpcApi}; use lightning_block_sync::init::validate_best_block_header; @@ -259,13 +258,6 @@ async fn main() { tip.height ); - // This is how chain poller names bitcoin networks. - let btc_network = match conf.btc_network.as_str() { - "main" => "bitcoin", - "test" => "testnet", - any => any, - }; - // Build components let gatekeeper = Arc::new(Gatekeeper::new( tip.height, @@ -275,7 +267,10 @@ async fn main() { dbm.clone(), )); - let mut poller = ChainPoller::new(&mut derefed, Network::from_str(btc_network).unwrap()); + let mut poller = ChainPoller::new( + &mut derefed, + Network::from_core_arg(&conf.btc_network).unwrap(), + ); let (responder, watcher) = { let last_n_blocks = get_last_n_blocks(&mut poller, tip, IRREVOCABLY_RESOLVED as usize) .await.unwrap_or_else(|e| { diff --git a/teos/src/responder.rs b/teos/src/responder.rs index b7412cc..f816aac 100644 --- a/teos/src/responder.rs +++ b/teos/src/responder.rs @@ -3,8 +3,10 @@ use std::collections::HashSet; use std::sync::{Arc, Mutex}; +use bitcoin::hashes::Hash; use bitcoin::{consensus, BlockHash}; -use bitcoin::{BlockHeader, Transaction, Txid}; +use bitcoin::{Transaction, Txid}; + use lightning::chain; use lightning_block_sync::poll::ValidatedBlock; @@ -93,8 +95,18 @@ impl TransactionTracker { impl From for common_msgs::Tracker { fn from(t: TransactionTracker) -> Self { common_msgs::Tracker { - dispute_txid: t.dispute_tx.txid().to_vec(), - penalty_txid: t.penalty_tx.txid().to_vec(), + dispute_txid: t + .dispute_tx + .compute_txid() + .to_raw_hash() + .to_byte_array() + .to_vec(), + penalty_txid: t + .penalty_tx + .compute_txid() + .to_raw_hash() + .to_byte_array() + .to_vec(), penalty_rawtx: consensus::serialize(&t.penalty_tx), } } @@ -182,9 +194,9 @@ impl Responder { let tx_index = self.tx_index.lock().unwrap(); // Check whether the transaction is in mempool or part of our internal txindex. Send it to our node otherwise. - let status = if let Some(block_hash) = tx_index.get(&breach.penalty_tx.txid()) { + let status = if let Some(block_hash) = tx_index.get(&breach.penalty_tx.compute_txid()) { ConfirmationStatus::ConfirmedIn(tx_index.get_height(block_hash).unwrap() as u32) - } else if carrier.in_mempool(&breach.penalty_tx.txid()) { + } else if carrier.in_mempool(&breach.penalty_tx.compute_txid()) { // If it's in mempool we assume it was just included ConfirmationStatus::InMempoolSince(carrier.block_height()) } else { @@ -292,7 +304,7 @@ impl Responder { // Republish all the dispute transactions of the reorged trackers. for uuid in reorged_trackers { let tracker = dbm.load_tracker(uuid).unwrap(); - let dispute_txid = tracker.dispute_tx.txid(); + let dispute_txid = tracker.dispute_tx.compute_txid(); // Try to publish the dispute transaction. let should_publish_penalty = match carrier.send_transaction(&tracker.dispute_tx) { ConfirmationStatus::InMempoolSince(_) => { @@ -368,7 +380,7 @@ impl Responder { let tracker = dbm.load_tracker(uuid).unwrap(); log::warn!( "Penalty transaction has missed many confirmations: {}", - tracker.penalty_tx.txid() + tracker.penalty_tx.compute_txid() ); // Rebroadcast the penalty transaction. let status = carrier.send_transaction(&tracker.penalty_tx); @@ -401,7 +413,7 @@ impl chain::Listen for Responder { /// rebroadcasting is performed for those that have missed too many. fn filtered_block_connected( &self, - header: &BlockHeader, + header: &bitcoin::block::Header, txdata: &chain::transaction::TransactionData, height: u32, ) { @@ -410,7 +422,7 @@ impl chain::Listen for Responder { let txs = txdata .iter() - .map(|(_, tx)| (tx.txid(), header.block_hash())) + .map(|(_, tx)| (tx.compute_txid(), header.block_hash())) .collect(); self.tx_index.lock().unwrap().update(*header, &txs); @@ -444,7 +456,7 @@ impl chain::Listen for Responder { } /// Handles reorgs in the [Responder]. - fn block_disconnected(&self, header: &BlockHeader, height: u32) { + fn block_disconnected(&self, header: &bitcoin::block::Header, height: u32) { log::warn!("Block disconnected: {}", header.block_hash()); // Update the carrier and our tx_index. self.carrier.lock().unwrap().update_height(height); @@ -490,7 +502,7 @@ mod tests { impl TransactionTracker { pub fn locator(&self) -> Locator { - Locator::new(self.dispute_tx.txid()) + Locator::new(self.dispute_tx.compute_txid()) } pub fn uuid(&self) -> UUID { @@ -529,7 +541,7 @@ mod tests { pub(crate) fn add_dummy_tracker(&self, tracker: &TransactionTracker) { let (_, appointment) = generate_dummy_appointment_with_user( tracker.user_id, - Some(&tracker.dispute_tx.txid()), + Some(&tracker.dispute_tx.compute_txid()), ); store_appointment_and_its_user(&self.dbm.lock().unwrap(), &appointment); self.dbm @@ -712,7 +724,7 @@ mod tests { let (user_id, uuid) = responder.store_dummy_appointment_to_db(); let breach = get_random_breach(); - let penalty_txid = breach.penalty_tx.txid(); + let penalty_txid = breach.penalty_tx.compute_txid(); // Add the tx to our txindex let target_block_hash = *responder.tx_index.lock().unwrap().blocks().get(2).unwrap(); @@ -913,7 +925,7 @@ mod tests { ConfirmationStatus::InMempoolSince(i), ); just_confirmed.insert(uuid); - txids.insert(breach.penalty_tx.txid()); + txids.insert(breach.penalty_tx.compute_txid()); } 2 => { responder.add_tracker( @@ -1186,7 +1198,7 @@ mod tests { let user_id = users[i % 2]; let dispute_tx = get_random_tx(); let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); responder .gatekeeper @@ -1214,7 +1226,7 @@ mod tests { for _ in 0..3 { let dispute_tx = get_random_tx(); let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); responder .gatekeeper .add_update_appointment(user_id, uuid, &appointment) @@ -1249,8 +1261,10 @@ mod tests { let mut just_confirmed_trackers = Vec::new(); for i in 0..10 { let dispute_tx = get_random_tx(); - let (uuid, appointment) = - generate_dummy_appointment_with_user(standalone_user_id, Some(&dispute_tx.txid())); + let (uuid, appointment) = generate_dummy_appointment_with_user( + standalone_user_id, + Some(&dispute_tx.compute_txid()), + ); responder .gatekeeper .add_update_appointment(standalone_user_id, uuid, &appointment) @@ -1285,8 +1299,10 @@ mod tests { let mut trackers_to_rebroadcast = Vec::new(); for _ in 0..5 { let dispute_tx = get_random_tx(); - let (uuid, appointment) = - generate_dummy_appointment_with_user(standalone_user_id, Some(&dispute_tx.txid())); + let (uuid, appointment) = generate_dummy_appointment_with_user( + standalone_user_id, + Some(&dispute_tx.compute_txid()), + ); responder .gatekeeper .add_update_appointment(standalone_user_id, uuid, &appointment) @@ -1317,7 +1333,10 @@ mod tests { .lock() .unwrap() .get_issued_receipts() - .insert(get_random_tx().txid(), ConfirmationStatus::ConfirmedIn(21)); + .insert( + get_random_tx().compute_txid(), + ConfirmationStatus::ConfirmedIn(21), + ); // Connecting a block should trigger all the state transitions let block = chain.generate(Some( @@ -1433,7 +1452,7 @@ mod tests { // Generate appointment and also add it to the DB let dispute_tx = get_random_tx(); let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); responder .dbm .lock() diff --git a/teos/src/test_utils.rs b/teos/src/test_utils.rs index 4dba0a9..16f9675 100644 --- a/teos/src/test_utils.rs +++ b/teos/src/test_utils.rs @@ -8,6 +8,7 @@ */ use rand::Rng; +use std::ops::Deref; use std::sync::{Arc, Condvar, Mutex}; use std::thread; @@ -17,22 +18,24 @@ use jsonrpc_http_server::{CloseHandle, Server, ServerBuilder}; use bitcoincore_rpc::{Auth, Client as BitcoindClient}; -use bitcoin::blockdata::block::{Block, BlockHeader}; +use bitcoin::block::Block; use bitcoin::blockdata::constants::genesis_block; -use bitcoin::blockdata::script::{Builder, Script}; +use bitcoin::blockdata::script::{Builder, ScriptBuf}; use bitcoin::blockdata::transaction::{OutPoint, Transaction, TxIn, TxOut}; use bitcoin::hash_types::BlockHash; use bitcoin::hash_types::Txid; use bitcoin::hashes::Hash; -use bitcoin::network::constants::Network; -use bitcoin::util::hash::bitcoin_merkle_root; -use bitcoin::util::uint::Uint256; +use bitcoin::merkle_tree::calculate_root; +use bitcoin::pow::Work; +use bitcoin::Amount; +use bitcoin::Network; use bitcoin::Witness; use lightning_block_sync::poll::{ ChainPoller, Poll, Validate, ValidatedBlock, ValidatedBlockHeader, }; use lightning_block_sync::{ - AsyncBlockSourceResult, BlockHeaderData, BlockSource, BlockSourceError, UnboundedCache, + AsyncBlockSourceResult, BlockData, BlockHeaderData, BlockSource, BlockSourceError, + UnboundedCache, }; use teos_common::constants::IRREVOCABLY_RESOLVED; @@ -153,8 +156,11 @@ impl Blockchain { fn at_height_unvalidated(&self, height: usize) -> BlockHeaderData { assert!(!self.blocks.is_empty()); assert!(height < self.blocks.len()); + let height_bytes = height.to_be_bytes(); + let mut padded_bytes = [0u8; 32]; + padded_bytes[32 - height_bytes.len()..].copy_from_slice(&height_bytes); BlockHeaderData { - chainwork: self.blocks[0].header.work() + Uint256::from_u64(height as u64).unwrap(), + chainwork: self.blocks[0].header.work() + Work::from_be_bytes(padded_bytes), height: height as u32, header: self.blocks[height].header, } @@ -184,7 +190,7 @@ impl Blockchain { } pub fn generate(&mut self, txs: Option>) -> Block { - let bits = BlockHeader::compact_target_from_u256(&Uint256::from_be_bytes([0xff; 32])); + let bits = bitcoin::Target::from_be_bytes([0xff; 32]).to_compact_lossy(); let prev_block = self.blocks.last().unwrap(); let prev_blockhash = prev_block.block_hash(); @@ -199,17 +205,17 @@ impl Blockchain { } None => vec![get_random_tx()], }; - let hashes = txdata.iter().map(|obj| obj.txid().as_hash()); - let mut header = BlockHeader { - version: 0, + let hashes = txdata.iter().map(|tx| tx.compute_txid().to_raw_hash()); + let mut header = bitcoin::block::Header { + version: bitcoin::block::Version::from_consensus(0), prev_blockhash, - merkle_root: bitcoin_merkle_root(hashes).unwrap().into(), + merkle_root: calculate_root(hashes).unwrap().into(), time, bits, nonce: 0, }; - while header.validate_pow(&header.target()).is_err() { + while header.validate_pow(header.target()).is_err() { header.nonce += 1; } @@ -245,7 +251,7 @@ impl BlockSource for Blockchain { }) } - fn get_block<'a>(&'a self, header_hash: &'a BlockHash) -> AsyncBlockSourceResult<'a, Block> { + fn get_block<'a>(&'a self, header_hash: &'a BlockHash) -> AsyncBlockSourceResult { Box::pin(async move { for (height, block) in self.blocks.iter().enumerate() { if block.header.block_hash() == *header_hash { @@ -254,8 +260,7 @@ impl BlockSource for Blockchain { return Err(BlockSourceError::persistent("block not found")); } } - - return Ok(block.clone()); + return Ok(BlockData::FullBlock(block.clone())); } } Err(BlockSourceError::transient("block not found")) @@ -289,20 +294,20 @@ pub(crate) fn get_random_tx() -> Transaction { let prev_txid_bytes = get_random_bytes(32); Transaction { - version: 2, - lock_time: 0, + version: bitcoin::transaction::Version(2), + lock_time: bitcoin::locktime::absolute::LockTime::from_height(0).unwrap(), input: vec![TxIn { previous_output: OutPoint::new( Txid::from_slice(&prev_txid_bytes).unwrap(), rng.gen_range(0..200), ), - script_sig: Script::new(), + script_sig: ScriptBuf::new(), witness: Witness::new(), - sequence: 0, + sequence: bitcoin::Sequence(0), }], output: vec![TxOut { script_pubkey: Builder::new().push_int(1).into_script(), - value: rng.gen_range(0..21000000000), + value: Amount::from_sat(rng.gen_range(0..21_000_000_000)), }], } } @@ -367,6 +372,17 @@ pub(crate) async fn get_last_n_blocks(chain: &mut Blockchain, n: usize) -> Vec Vec { + last_n_blocks.iter().map(get_full_block).collect() +} + +pub(crate) fn get_full_block(block: &ValidatedBlock) -> Block { + match block.deref() { + BlockData::FullBlock(b) => b.clone(), + _ => panic!("Expected FullBlock"), + } +} + pub(crate) enum MockedServerQuery { Regular, InMempoool, @@ -405,7 +421,7 @@ pub(crate) async fn create_responder( let bitcoind_reachable = Arc::new((Mutex::new(true), Condvar::new())); let carrier = Carrier::new(bitcoin_cli, bitcoind_reachable, height); - Responder::new(&last_n_blocks, height, carrier, gatekeeper, dbm) + Responder::new(last_n_blocks.as_slice(), height, carrier, gatekeeper, dbm) } pub(crate) async fn create_watcher( @@ -424,7 +440,7 @@ pub(crate) async fn create_watcher( Watcher::new( gatekeeper, responder, - &last_n_blocks, + last_n_blocks.as_slice(), chain.get_block_count(), tower_sk, tower_id, diff --git a/teos/src/tx_index.rs b/teos/src/tx_index.rs index 404c047..c0b4ee4 100644 --- a/teos/src/tx_index.rs +++ b/teos/src/tx_index.rs @@ -1,9 +1,11 @@ use std::collections::{HashMap, VecDeque}; use std::fmt; use std::hash::Hash; +use std::ops::Deref; +use bitcoin::block::Header; use bitcoin::hash_types::BlockHash; -use bitcoin::{BlockHeader, Transaction, Txid}; +use bitcoin::{Transaction, Txid}; use lightning_block_sync::poll::ValidatedBlock; use teos_common::appointment::Locator; @@ -110,29 +112,38 @@ where }; for block in last_n_blocks.iter().rev() { - if let Some(prev_block_hash) = tx_index.blocks.back() { - if block.header.prev_blockhash != *prev_block_hash { - panic!("last_n_blocks contains unchained blocks"); + match block.deref() { + lightning_block_sync::BlockData::HeaderOnly(_) => { + panic!("Expected FullBlock") } - }; + lightning_block_sync::BlockData::FullBlock(block) => { + if let Some(prev_block_hash) = tx_index.blocks.back() { + if block.header.prev_blockhash != *prev_block_hash { + panic!("last_n_blocks contains unchained blocks"); + } + }; - let map = block - .txdata - .iter() - .map(|tx| { - ( - K::from_txid(tx.txid()), - match V::get_type() { - Type::Transaction => V::from_data(Data::Transaction(tx.clone())), - Type::BlockHash => { - V::from_data(Data::BlockHash(block.header.block_hash())) - } - }, - ) - }) - .collect(); + let map = block + .txdata + .iter() + .map(|tx| { + ( + K::from_txid(tx.compute_txid()), + match V::get_type() { + Type::Transaction => { + V::from_data(Data::Transaction(tx.clone())) + } + Type::BlockHash => { + V::from_data(Data::BlockHash(block.header.block_hash())) + } + }, + ) + }) + .collect(); - tx_index.update(block.header, &map); + tx_index.update(block.header, &map); + } + } } tx_index @@ -155,7 +166,7 @@ where } /// Updates the index by adding data from a new block. Removes the oldest block if the index is full afterwards. - pub fn update(&mut self, block_header: BlockHeader, data: &HashMap) { + pub fn update(&mut self, block_header: Header, data: &HashMap) { self.blocks.push_back(block_header.block_hash()); let ks = data @@ -218,8 +229,9 @@ mod tests { use super::*; use std::ops::Deref; - use crate::test_utils::{get_last_n_blocks, Blockchain}; + use crate::test_utils::{get_full_block, get_full_blocks, get_last_n_blocks, Blockchain}; + use bitcoin::hashes::serde_macros::serde_details::SerdeHash; use bitcoin::Block; impl TxIndex @@ -246,10 +258,7 @@ mod tests { let height = 10; let mut chain = Blockchain::default().with_height(height as usize); let last_six_blocks = get_last_n_blocks(&mut chain, 6).await; - let blocks: Vec = last_six_blocks - .iter() - .map(|block| block.deref().clone()) - .collect(); + let blocks: Vec = get_full_blocks(&last_six_blocks); let cache: TxIndex = TxIndex::new(&last_six_blocks, height); assert_eq!(blocks.len(), cache.size); @@ -258,7 +267,7 @@ mod tests { let mut locators = Vec::new(); for tx in block.txdata.iter() { - let locator = Locator::new(tx.txid()); + let locator = Locator::new(tx.compute_txid()); assert!(cache.contains_key(&locator)); locators.push(locator); } @@ -275,19 +284,22 @@ mod tests { let last_n_blocks = get_last_n_blocks(&mut chain, cache_size).await; // last_n_blocks is ordered from latest to earliest - let first_block = last_n_blocks.get(cache_size - 1).unwrap(); - let last_block = last_n_blocks.first().unwrap(); - let mid = last_n_blocks.get(cache_size / 2).unwrap(); + let first_block = get_full_block(last_n_blocks.get(cache_size - 1).unwrap()); + let last_block = get_full_block(last_n_blocks.first().unwrap()); + let mid_block = get_full_block(last_n_blocks.get(cache_size / 2).unwrap()); let cache: TxIndex = TxIndex::new(&last_n_blocks, height as u32); assert_eq!( - cache.get_height(&first_block.block_hash()).unwrap(), + cache.get_height(&first_block.header.block_hash()).unwrap(), height - cache_size + 1 ); - assert_eq!(cache.get_height(&last_block.block_hash()).unwrap(), height); assert_eq!( - cache.get_height(&mid.block_hash()).unwrap(), + cache.get_height(&last_block.header.block_hash()).unwrap(), + height + ); + assert_eq!( + cache.get_height(&mid_block.header.block_hash()).unwrap(), height - cache_size / 2 ); } @@ -302,8 +314,8 @@ mod tests { height as u32, ); - let fake_hash = BlockHash::default(); - assert!(cache.get_height(&fake_hash).is_none()); + let fake_hash = &BlockHash::from_slice_delegated(&[0; 32]).unwrap(); + assert!(cache.get_height(fake_hash).is_none()); } #[tokio::test] @@ -315,36 +327,42 @@ mod tests { // Store the last block to use it for an update and the first to check eviction // Notice that the list of blocks is ordered from last to first. let last_block = last_n_blocks.remove(0); - let first_block = last_n_blocks.last().unwrap().deref().clone(); + let first_block = last_n_blocks.last().unwrap(); // Init the cache with the 6 block before the last let mut cache = TxIndex::new(&last_n_blocks, height); // Update the cache with the last block - let locator_tx_map = last_block + let full_block = get_full_block(&last_block); + let locator_tx_map = full_block .txdata .iter() - .map(|tx| (Locator::new(tx.txid()), tx.clone())) + .map(|tx| (Locator::new(tx.compute_txid()), tx.clone())) .collect(); - cache.update(last_block.deref().header, &locator_tx_map); + let header = full_block.header; + cache.update(header, &locator_tx_map); // Check that the new data is in the cache - assert!(cache.blocks().contains(&last_block.block_hash())); + assert!(cache.blocks().contains(&header.block_hash())); + for (locator, _) in locator_tx_map.iter() { assert!(cache.contains_key(locator)); } + + let block_hash = full_block.header.block_hash(); assert_eq!( - cache.tx_in_block[&last_block.block_hash()], + cache.tx_in_block[&block_hash], locator_tx_map.keys().cloned().collect::>() ); // Check that the data from the first block has been evicted - assert!(!cache.blocks().contains(&first_block.block_hash())); - for tx in first_block.txdata.iter() { - assert!(!cache.contains_key(&Locator::new(tx.txid()))); - } - assert!(!cache.tx_in_block.contains_key(&first_block.block_hash())); + let first_full_block = get_full_block(first_block); + let tx = first_full_block.txdata[0].clone(); + assert!(!cache.contains_key(&Locator::new(tx.compute_txid()))); + + let block_hash = first_full_block.header.block_hash(); + assert!(!cache.tx_in_block.contains_key(&block_hash)); } #[tokio::test] diff --git a/teos/src/watcher.rs b/teos/src/watcher.rs index 037319d..caf7766 100644 --- a/teos/src/watcher.rs +++ b/teos/src/watcher.rs @@ -4,8 +4,9 @@ use std::collections::HashMap; use std::sync::atomic::{AtomicU32, Ordering}; use std::sync::{Arc, Mutex}; +use bitcoin::block::Header; use bitcoin::secp256k1::SecretKey; -use bitcoin::{BlockHeader, Transaction}; +use bitcoin::Transaction; use lightning::chain; use lightning_block_sync::poll::ValidatedBlock; @@ -261,7 +262,7 @@ impl Watcher { "Trigger for locator {} found in cache", appointment.locator() ); - match cryptography::decrypt(appointment.encrypted_blob(), &dispute_tx.txid()) { + match cryptography::decrypt(appointment.encrypted_blob(), &dispute_tx.compute_txid()) { Ok(penalty_tx) => { // Data needs to be added the database straightaway since appointments are // FKs to trackers. If handle breach fails, data will be deleted later. @@ -383,7 +384,10 @@ impl Watcher { let uuids = self.dbm.lock().unwrap().load_uuids(locator); for uuid in uuids { let appointment = self.dbm.lock().unwrap().load_appointment(uuid).unwrap(); - match cryptography::decrypt(appointment.encrypted_blob(), &dispute_tx.txid()) { + match cryptography::decrypt( + appointment.encrypted_blob(), + &dispute_tx.compute_txid(), + ) { Ok(penalty_tx) => { if let ConfirmationStatus::Rejected(_) = self.responder.handle_breach( uuid, @@ -493,7 +497,7 @@ impl chain::Listen for Watcher { /// told by the [Gatekeeper]. fn filtered_block_connected( &self, - header: &BlockHeader, + header: &Header, txdata: &chain::transaction::TransactionData, height: u32, ) { @@ -501,7 +505,7 @@ impl chain::Listen for Watcher { let locator_tx_map = txdata .iter() - .map(|(_, tx)| (Locator::new(tx.txid()), (*tx).clone())) + .map(|(_, tx)| (Locator::new(tx.compute_txid()), (*tx).clone())) .collect(); self.locator_cache @@ -522,7 +526,7 @@ impl chain::Listen for Watcher { /// Handle reorgs in the [Watcher]. /// /// Fixes the [LocatorCache] by removing the disconnected data and updates the last_known_block_height. - fn block_disconnected(&self, header: &BlockHeader, height: u32) { + fn block_disconnected(&self, header: &Header, height: u32) { log::warn!("Block disconnected: {}", header.block_hash()); self.locator_cache .lock() @@ -640,7 +644,7 @@ mod tests { // (as if simulating a bootstrap from existing data), the data should be properly loaded. for _ in 0..10 { let appointment = generate_dummy_appointment(None).inner; - let user_sig = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let user_sig = cryptography::sign(&appointment.to_vec(), &user_sk); watcher .add_appointment(appointment.clone(), user_sig.clone()) .unwrap(); @@ -702,7 +706,7 @@ mod tests { let user_id = UserId(user_pk); watcher.register(user_id).unwrap(); let appointment = generate_dummy_appointment(None).inner; - let user_sig = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let user_sig = cryptography::sign(&appointment.to_vec(), &user_sk); // Add the appointment for a new user (twice so we can check that updates work) for _ in 0..2 { @@ -718,7 +722,7 @@ mod tests { let user2_id = UserId(user2_pk); watcher.register(user2_id).unwrap(); - let user2_sig = cryptography::sign(&appointment.to_vec(), &user2_sk).unwrap(); + let user2_sig = cryptography::sign(&appointment.to_vec(), &user2_sk); let (receipt, slots, expiry) = watcher .add_appointment(appointment.clone(), user2_sig.clone()) .unwrap(); @@ -732,9 +736,8 @@ mod tests { // If an appointment is already in the Responder, it should bounce let dispute_tx = get_random_tx(); let (uuid, triggered_appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); - let signature = - cryptography::sign(&triggered_appointment.inner.to_vec(), &user_sk).unwrap(); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); + let signature = cryptography::sign(&triggered_appointment.inner.to_vec(), &user_sk); let (receipt, slots, expiry) = watcher .add_appointment(triggered_appointment.inner.clone(), signature.clone()) .unwrap(); @@ -762,8 +765,8 @@ mod tests { // If the trigger is already in the cache, the appointment will go straight to the Responder let dispute_tx = tip_txs.last().unwrap(); let (uuid, appointment_in_cache) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); - let user_sig = cryptography::sign(&appointment_in_cache.inner.to_vec(), &user_sk).unwrap(); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); + let user_sig = cryptography::sign(&appointment_in_cache.inner.to_vec(), &user_sk); let (receipt, slots, expiry) = watcher .add_appointment(appointment_in_cache.inner, user_sig.clone()) .unwrap(); @@ -779,9 +782,9 @@ mod tests { // Wrong penalty let dispute_tx = &tip_txs[tip_txs.len() - 2]; let (uuid, mut invalid_appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); invalid_appointment.inner.encrypted_blob.reverse(); - let user_sig = cryptography::sign(&invalid_appointment.inner.to_vec(), &user_sk).unwrap(); + let user_sig = cryptography::sign(&invalid_appointment.inner.to_vec(), &user_sk); let (receipt, slots, expiry) = watcher .add_appointment(invalid_appointment.inner, user_sig.clone()) .unwrap(); @@ -803,8 +806,8 @@ mod tests { let dispute_tx = &tip_txs[tip_txs.len() - 2]; let (uuid, invalid_appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); - let user_sig = cryptography::sign(&invalid_appointment.inner.to_vec(), &user_sk).unwrap(); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); + let user_sig = cryptography::sign(&invalid_appointment.inner.to_vec(), &user_sk); let (receipt, slots, expiry) = watcher .add_appointment(invalid_appointment.inner, user_sig.clone()) .unwrap(); @@ -841,7 +844,7 @@ mod tests { .available_slots = 0; let (uuid, appointment) = generate_dummy_appointment_with_user(user_id, None); - let signature = cryptography::sign(&appointment.inner.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.inner.to_vec(), &user_sk); assert!(matches!( watcher.add_appointment(appointment.inner, signature), @@ -856,7 +859,7 @@ mod tests { .add_outdated_user(user2_id, START_HEIGHT as u32); let (uuid, appointment) = generate_dummy_appointment_with_user(user2_id, None); - let signature = cryptography::sign(&appointment.inner.to_vec(), &user2_sk).unwrap(); + let signature = cryptography::sign(&appointment.inner.to_vec(), &user2_sk); assert!(matches!( watcher.add_appointment(appointment.inner, signature), @@ -875,7 +878,7 @@ mod tests { let (_, user_pk) = get_random_keypair(); let user_id = UserId(user_pk); watcher.register(user_id).unwrap(); - let dispute_txid = get_random_tx().txid(); + let dispute_txid = get_random_tx().compute_txid(); let (uuid, appointment) = generate_dummy_appointment_with_user(user_id, Some(&dispute_txid)); @@ -917,7 +920,7 @@ mod tests { let dispute_tx = get_random_tx(); let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); // Valid triggered appointments should be accepted by the Responder assert_eq!( @@ -937,7 +940,7 @@ mod tests { *watcher.responder.get_carrier().lock().unwrap() = carrier; let dispute_tx = get_random_tx(); let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&dispute_tx.compute_txid())); assert_eq!( watcher.store_triggered_appointment(uuid, &appointment, user_id, &dispute_tx), TriggeredAppointment::Rejected, @@ -965,7 +968,7 @@ mod tests { let (watcher, _s) = init_watcher(&mut chain).await; let dispute_tx = get_random_tx(); - let appointment = generate_dummy_appointment(Some(&dispute_tx.txid())).inner; + let appointment = generate_dummy_appointment(Some(&dispute_tx.compute_txid())).inner; // If the user cannot be properly identified, the request will fail. This can be simulated by providing a wrong signature let wrong_sig = String::from_utf8((0..65).collect()).unwrap(); @@ -981,12 +984,12 @@ mod tests { watcher .add_appointment( appointment.clone(), - cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &user_sk), ) .unwrap(); let message = format!("get appointment {}", appointment.locator); - let signature = cryptography::sign(message.as_bytes(), &user_sk).unwrap(); + let signature = cryptography::sign(message.as_bytes(), &user_sk); let info = watcher .get_appointment(appointment.locator, &signature) .unwrap(); @@ -1012,7 +1015,7 @@ mod tests { let tracker = TransactionTracker::new(breach, user_id, status); let tracker_message = format!("get appointment {}", appointment.locator); - let tracker_signature = cryptography::sign(tracker_message.as_bytes(), &user_sk).unwrap(); + let tracker_signature = cryptography::sign(tracker_message.as_bytes(), &user_sk); let info = watcher .get_appointment(appointment.locator, &tracker_signature) .unwrap(); @@ -1030,7 +1033,7 @@ mod tests { let user2_id = UserId(user2_pk); watcher.register(user2_id).unwrap(); - let signature2 = cryptography::sign(message.as_bytes(), &user2_sk).unwrap(); + let signature2 = cryptography::sign(message.as_bytes(), &user2_sk); assert!(matches!( watcher.get_appointment(appointment.locator, &signature2), Err(GetAppointmentFailure::NotFound { .. }) @@ -1055,7 +1058,7 @@ mod tests { // Let's create some locators based on the transactions in the last block let locator_tx_map: HashMap<_, _> = (0..10) .map(|_| get_random_tx()) - .map(|tx| (Locator::new(tx.txid()), tx)) + .map(|tx| (Locator::new(tx.compute_txid()), tx)) .collect(); let (user_sk, user_pk) = get_random_keypair(); @@ -1067,8 +1070,8 @@ mod tests { for (i, (l, tx)) in locator_tx_map.iter().enumerate() { // Track some of the these transactions. if i % 2 == 0 { - let appointment = generate_dummy_appointment(Some(&tx.txid())).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let appointment = generate_dummy_appointment(Some(&tx.compute_txid())).inner; + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); watcher.add_appointment(appointment, signature).unwrap(); breaches.insert(*l, tx.clone()); } @@ -1086,7 +1089,7 @@ mod tests { // Let's create some locators based on the transactions in the last block let breaches: HashMap<_, _> = (0..10) .map(|_| get_random_tx()) - .map(|tx| (Locator::new(tx.txid()), tx)) + .map(|tx| (Locator::new(tx.compute_txid()), tx)) .collect(); let (user_sk, user_pk) = get_random_keypair(); @@ -1095,8 +1098,8 @@ mod tests { // Let the watcher track these breaches. for (_, tx) in breaches.iter() { - let appointment = generate_dummy_appointment(Some(&tx.txid())).inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let appointment = generate_dummy_appointment(Some(&tx.compute_txid())).inner; + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); watcher.add_appointment(appointment, signature).unwrap(); } @@ -1111,7 +1114,7 @@ mod tests { // Let's create some locators based on the transactions in the last block let breaches: HashMap<_, _> = (0..10) .map(|_| get_random_tx()) - .map(|tx| (Locator::new(tx.txid()), tx)) + .map(|tx| (Locator::new(tx.compute_txid()), tx)) .collect(); let (user_sk, user_pk) = get_random_keypair(); @@ -1122,14 +1125,14 @@ mod tests { // Let the watcher track these breaches. for (i, (_, tx)) in breaches.iter().enumerate() { let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&tx.compute_txid())); let mut appointment = appointment.inner; if i % 2 == 0 { // Mal-format some appointments appointment.encrypted_blob.reverse(); rejected.insert(uuid); }; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); watcher.add_appointment(appointment, signature).unwrap(); } @@ -1154,7 +1157,7 @@ mod tests { // Let's create some locators based on the transactions in the last block let breaches: HashMap<_, _> = (0..10) .map(|_| get_random_tx()) - .map(|tx| (Locator::new(tx.txid()), tx)) + .map(|tx| (Locator::new(tx.compute_txid()), tx)) .collect(); let (user_sk, user_pk) = get_random_keypair(); @@ -1165,9 +1168,9 @@ mod tests { // Let the watcher track these breaches. for tx in breaches.values() { let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&tx.compute_txid())); let appointment = appointment.inner; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); watcher.add_appointment(appointment, signature).unwrap(); uuids.insert(uuid); } @@ -1186,7 +1189,7 @@ mod tests { // Let's create some locators based on the transactions in the last block let breaches: HashMap<_, _> = (0..10) .map(|_| get_random_tx()) - .map(|tx| (Locator::new(tx.txid()), tx)) + .map(|tx| (Locator::new(tx.compute_txid()), tx)) .collect(); let (user_sk, user_pk) = get_random_keypair(); @@ -1197,14 +1200,14 @@ mod tests { // Let the watcher track these breaches. for (i, (_, tx)) in breaches.iter().enumerate() { let (uuid, appointment) = - generate_dummy_appointment_with_user(user_id, Some(&tx.txid())); + generate_dummy_appointment_with_user(user_id, Some(&tx.compute_txid())); let mut appointment = appointment.inner; if i % 2 == 0 { // Mal-format some appointments, they should be returned as rejected. appointment.encrypted_blob.reverse(); rejected_breaches.insert(uuid); }; - let signature = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let signature = cryptography::sign(&appointment.to_vec(), &user_sk); watcher.add_appointment(appointment, signature).unwrap(); } @@ -1255,11 +1258,11 @@ mod tests { let uuid1 = UUID::new(appointment.locator, user_id); let uuid2 = UUID::new(appointment.locator, user2_id); - let user_sig = cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(); + let user_sig = cryptography::sign(&appointment.to_vec(), &user_sk); watcher .add_appointment(appointment.clone(), user_sig) .unwrap(); - let user2_sig = cryptography::sign(&appointment.to_vec(), &user2_sk).unwrap(); + let user2_sig = cryptography::sign(&appointment.to_vec(), &user2_sk); watcher.add_appointment(appointment, user2_sig).unwrap(); // Outdate the first user's registration. @@ -1298,8 +1301,8 @@ mod tests { // Check triggers. Add a new appointment and trigger it with valid data. let dispute_tx = get_random_tx(); let (uuid, appointment) = - generate_dummy_appointment_with_user(user2_id, Some(&dispute_tx.txid())); - let sig = cryptography::sign(&appointment.inner.to_vec(), &user2_sk).unwrap(); + generate_dummy_appointment_with_user(user2_id, Some(&dispute_tx.compute_txid())); + let sig = cryptography::sign(&appointment.inner.to_vec(), &user2_sk); watcher.add_appointment(appointment.inner, sig).unwrap(); assert!(watcher.dbm.lock().unwrap().appointment_exists(uuid)); @@ -1316,10 +1319,10 @@ mod tests { // Checks invalid triggers. Add a new appointment and trigger it with invalid data. let dispute_tx = get_random_tx(); let (uuid, mut appointment) = - generate_dummy_appointment_with_user(user2_id, Some(&dispute_tx.txid())); + generate_dummy_appointment_with_user(user2_id, Some(&dispute_tx.compute_txid())); // Modify the encrypted blob so the data is invalid. appointment.inner.encrypted_blob.reverse(); - let sig = cryptography::sign(&appointment.inner.to_vec(), &user2_sk).unwrap(); + let sig = cryptography::sign(&appointment.inner.to_vec(), &user2_sk); watcher.add_appointment(appointment.inner, sig).unwrap(); let block = chain.generate(Some(vec![dispute_tx])); @@ -1335,8 +1338,8 @@ mod tests { // Check triggering with a valid formatted transaction but that is rejected by the Responder. let dispute_tx = get_random_tx(); let (uuid, appointment) = - generate_dummy_appointment_with_user(user2_id, Some(&dispute_tx.txid())); - let sig = cryptography::sign(&appointment.inner.to_vec(), &user2_sk).unwrap(); + generate_dummy_appointment_with_user(user2_id, Some(&dispute_tx.compute_txid())); + let sig = cryptography::sign(&appointment.inner.to_vec(), &user2_sk); watcher.add_appointment(appointment.inner, sig).unwrap(); // Set the carrier response diff --git a/watchtower-plugin/Cargo.toml b/watchtower-plugin/Cargo.toml index ed9aa64..d216835 100755 --- a/watchtower-plugin/Cargo.toml +++ b/watchtower-plugin/Cargo.toml @@ -25,12 +25,12 @@ tonic = { version = "0.11", features = [ "tls", "transport" ] } tokio = { version = "1.5", features = [ "rt-multi-thread", "fs" ] } # Bitcoin and Lightning -bitcoin = "0.28.0" -cln-plugin = "0.1.2" +bitcoin = "0.32.0" +cln-plugin = "0.3.0" # Local teos-common = { path = "../teos-common" } [dev-dependencies] mockito = "0.32.4" -tempdir = "0.3.7" \ No newline at end of file +tempdir = "0.3.7" diff --git a/watchtower-plugin/src/main.rs b/watchtower-plugin/src/main.rs index f7942cc..74ebaa1 100755 --- a/watchtower-plugin/src/main.rs +++ b/watchtower-plugin/src/main.rs @@ -8,7 +8,8 @@ use serde_json::json; use tokio::io::{stdin, stdout}; use tokio::sync::mpsc::unbounded_channel; -use cln_plugin::options::{ConfigOption, Value}; +use cln_plugin::options::config_type::DefaultInteger; +use cln_plugin::options::ConfigOption; use cln_plugin::{anyhow, Builder, Error, Plugin}; use teos_common::appointment::{Appointment, Locator}; @@ -28,6 +29,31 @@ use watchtower_plugin::retrier::RetryManager; use watchtower_plugin::wt_client::{RevocationData, WTClient}; use watchtower_plugin::{constants, TowerStatus}; +const DEV_WT_MAX_RETRY_INTERVAL_CONFIG: ConfigOption = + ConfigOption::new_i64_with_default( + constants::DEV_WT_MAX_RETRY_INTERVAL, + constants::DEFAULT_DEV_WT_MAX_RETRY_INTERVAL, + constants::DEV_WT_MAX_RETRY_INTERVAL_DESC, + ); + +const WT_AUTO_RETRY_DELAY_CONFIG: ConfigOption = ConfigOption::new_i64_with_default( + constants::WT_AUTO_RETRY_DELAY, + constants::DEFAULT_WT_AUTO_RETRY_DELAY, + constants::WT_AUTO_RETRY_DELAY_DESC, +); + +const WT_MAX_RETRY_TIME_CONFIG: ConfigOption = ConfigOption::new_i64_with_default( + constants::WT_MAX_RETRY_TIME, + constants::DEFAULT_WT_MAX_RETRY_TIME, + constants::WT_MAX_RETRY_TIME_DESC, +); + +const WT_PORT_CONFG: ConfigOption = ConfigOption::new_i64_with_default( + constants::WT_PORT, + constants::DEFAULT_WT_PORT, + constants::WT_PORT_DESC, +); + fn to_cln_error(e: RequestError) -> Error { let e = match e { RequestError::ConnectionError(e) => anyhow!(e), @@ -76,7 +102,7 @@ async fn register( // which is not available in the current version of `cln-plugin` (but already on master). Add it for the next release. let port = params.port.unwrap_or( - u16::try_from(plugin.option(constants::WT_PORT).unwrap().as_i64().unwrap()) + u16::try_from(plugin.option(&WT_PORT_CONFG).unwrap()) .map_err(|_| anyhow!("{} out of range", constants::WT_PORT))?, ); @@ -162,7 +188,7 @@ async fn get_subscription_info( } }?; - let signature = cryptography::sign("get subscription info".as_bytes(), &user_sk).unwrap(); + let signature = cryptography::sign("get subscription info".as_bytes(), &user_sk); let response: common_msgs::GetSubscriptionInfoResponse = process_post_response( post_request( @@ -207,8 +233,7 @@ async fn get_appointment( let signature = cryptography::sign( format!("get appointment {}", params.locator).as_bytes(), &user_sk, - ) - .unwrap(); + ); let response: ApiResponse = process_post_response( post_request( @@ -422,8 +447,7 @@ async fn on_commitment_revocation( let signature = cryptography::sign( &appointment.to_vec(), &plugin.state().lock().unwrap().user_sk, - ) - .unwrap(); + ); // Looks like we cannot iterate through towers given a locked state is not Send (due to the async call), // so we need to clone the bare minimum. @@ -534,26 +558,10 @@ async fn main() -> Result<(), Error> { }; let builder = Builder::new(stdin(), stdout()) - .option(ConfigOption::new( - constants::WT_PORT, - Value::Integer(constants::DEFAULT_WT_PORT), - constants::WT_PORT_DESC, - )) - .option(ConfigOption::new( - constants::WT_MAX_RETRY_TIME, - Value::Integer(constants::DEFAULT_WT_MAX_RETRY_TIME), - constants::WT_MAX_RETRY_TIME_DESC, - )) - .option(ConfigOption::new( - constants::WT_AUTO_RETRY_DELAY, - Value::Integer(constants::DEFAULT_WT_AUTO_RETRY_DELAY), - constants::WT_AUTO_RETRY_DELAY_DESC, - )) - .option(ConfigOption::new( - constants::DEV_WT_MAX_RETRY_INTERVAL, - Value::Integer(constants::DEFAULT_DEV_WT_MAX_RETRY_INTERVAL), - constants::DEV_WT_MAX_RETRY_INTERVAL_DESC, - )) + .option(WT_PORT_CONFG) + .option(WT_MAX_RETRY_TIME_CONFIG) + .option(WT_AUTO_RETRY_DELAY_CONFIG) + .option(DEV_WT_MAX_RETRY_INTERVAL_CONFIG) .rpcmethod( constants::RPC_REGISTER_TOWER, constants::RPC_REGISTER_TOWER_DESC, @@ -629,34 +637,18 @@ async fn main() -> Result<(), Error> { .await, )); - let max_elapsed_time = u16::try_from( - midstate - .option(constants::WT_MAX_RETRY_TIME) - .unwrap() - .as_i64() - .unwrap(), - ) - .inspect_err(|_| { - log::error!("{} out of range", constants::WT_MAX_RETRY_TIME); - })?; + let max_elapsed_time = u16::try_from(midstate.option(&WT_MAX_RETRY_TIME_CONFIG).unwrap()) + .inspect_err(|_| { + log::error!("{} out of range", constants::WT_MAX_RETRY_TIME); + })?; - let auto_retry_delay = u32::try_from( - midstate - .option(constants::WT_AUTO_RETRY_DELAY) - .unwrap() - .as_i64() - .unwrap(), - ) - .inspect_err(|_| { - log::error!("{} out of range", constants::WT_AUTO_RETRY_DELAY); - })?; + let auto_retry_delay = u32::try_from(midstate.option(&WT_AUTO_RETRY_DELAY_CONFIG).unwrap()) + .inspect_err(|_| { + log::error!("{} out of range", constants::WT_AUTO_RETRY_DELAY); + })?; let max_interval_time = u16::try_from( - midstate - .option(constants::DEV_WT_MAX_RETRY_INTERVAL) - .unwrap() - .as_i64() - .unwrap(), + midstate.option(&DEV_WT_MAX_RETRY_INTERVAL_CONFIG).unwrap(), ) .inspect_err(|_| { log::error!("{} out of range", constants::DEV_WT_MAX_RETRY_INTERVAL); diff --git a/watchtower-plugin/src/retrier.rs b/watchtower-plugin/src/retrier.rs index dcbfaa6..e89d4e5 100644 --- a/watchtower-plugin/src/retrier.rs +++ b/watchtower-plugin/src/retrier.rs @@ -491,7 +491,7 @@ impl Retrier { &net_addr, &proxy, &appointment, - &cryptography::sign(&appointment.to_vec(), &user_sk).unwrap(), + &cryptography::sign(&appointment.to_vec(), &user_sk), ) .await { @@ -652,7 +652,7 @@ mod tests { // Prepare the mock response let mut add_appointment_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); add_appointment_receipt.sign(&tower_sk); @@ -793,7 +793,7 @@ mod tests { // Prepare the mock response let mut server = mockito::Server::new_async().await; let mut add_appointment_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); add_appointment_receipt.sign(&tower_sk); @@ -974,7 +974,7 @@ mod tests { // Prepare the mock response let mut add_appointment_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); // Sign with a random key so it counts as misbehaving @@ -1113,7 +1113,7 @@ mod tests { re_registration_receipt.sign(&tower_sk); let mut add_appointment_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); add_appointment_receipt.sign(&tower_sk); @@ -1239,9 +1239,15 @@ mod tests { MAX_ELAPSED_TIME as f64 + MAX_RUN_TIME, )) .await; - let state = wt_client.lock().unwrap(); - assert!(state.get_retrier_status(&tower_id).unwrap().is_idle()); + wait_until!(wt_client + .lock() + .unwrap() + .get_retrier_status(&tower_id) + .unwrap() + .is_idle()); + + let state = wt_client.lock().unwrap(); let tower = state.towers.get(&tower_id).unwrap(); assert!(tower.pending_appointments.contains(&appointment.locator)); assert_eq!(tower.status, TowerStatus::Unreachable); @@ -1267,11 +1273,11 @@ mod tests { // Create the receipts, the responses and set the mocks let mut appointment_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); let mut appointment2_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment2.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment2.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); appointment_receipt.sign(&tower_sk); @@ -1368,7 +1374,7 @@ mod tests { // Prepare the mock response let mut add_appointment_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); add_appointment_receipt.sign(&tower_sk); @@ -1439,7 +1445,7 @@ mod tests { // Prepare the mock response let mut add_appointment_receipt = AppointmentReceipt::new( - cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk).unwrap(), + cryptography::sign(&appointment.to_vec(), &wt_client.lock().unwrap().user_sk), 42, ); add_appointment_receipt.sign(&cryptography::get_random_keypair().0);