diff --git a/.github/workflows/build-release-binaries.yml b/.github/workflows/build-release-binaries.yml index 9c856a53..8e842a00 100644 --- a/.github/workflows/build-release-binaries.yml +++ b/.github/workflows/build-release-binaries.yml @@ -45,12 +45,12 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout tagged commit - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v3.5.3 with: ref: ${{ github.event.release.target_commitish }} token: ${{ secrets.BOTTY_GITHUB_TOKEN }} - - uses: Swatinem/rust-cache@v2.2.0 + - uses: Swatinem/rust-cache@v2.6.0 - uses: dtolnay/rust-toolchain@master with: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0fa9eae1..055e61b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,12 +13,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v3.5.3 - - uses: Swatinem/rust-cache@v2.2.0 + - uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.67 + components: clippy,rustfmt + + - uses: Swatinem/rust-cache@v2.6.0 - name: Check formatting - uses: dprint/check@v2.1 + uses: dprint/check@v2.2 + with: + dprint-version: 0.39.1 - name: Run clippy with default features run: cargo clippy --workspace --all-targets -- -D warnings @@ -30,9 +37,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v3.5.3 - - uses: Swatinem/rust-cache@v2.0.2 + - uses: Swatinem/rust-cache@v2.6.0 - name: Build swap run: cargo build --bin swap @@ -44,9 +51,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v3.5.3 - - uses: Swatinem/rust-cache@v2.0.2 + - uses: Swatinem/rust-cache@v2.6.0 - name: Install sqlx-cli run: cargo install sqlx-cli @@ -71,13 +78,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout sources - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v3.5.3 - - uses: Swatinem/rust-cache@v2.2.0 + - uses: Swatinem/rust-cache@v2.6.0 - uses: dtolnay/rust-toolchain@master with: - toolchain: 1.63 + toolchain: 1.67 targets: armv7-unknown-linux-gnueabihf - name: Build binary @@ -111,9 +118,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout sources - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v3.5.3 - - uses: Swatinem/rust-cache@v2.2.0 + - uses: Swatinem/rust-cache@v2.6.0 - name: Build tests run: cargo build --tests --workspace --all-features @@ -148,9 +155,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v3.5.3 - - uses: Swatinem/rust-cache@v2.2.0 + - uses: Swatinem/rust-cache@v2.6.0 - name: Run test ${{ matrix.test_name }} run: cargo test --package swap --all-features --test ${{ matrix.test_name }} -- --nocapture diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 40e79474..f3bee225 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -11,7 +11,7 @@ jobs: if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/') runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.3.0 + - uses: actions/checkout@v3.5.3 - name: Extract version from branch name id: extract-version diff --git a/.github/workflows/draft-new-release.yml b/.github/workflows/draft-new-release.yml index bd9a8298..b25b6fdc 100644 --- a/.github/workflows/draft-new-release.yml +++ b/.github/workflows/draft-new-release.yml @@ -12,7 +12,7 @@ jobs: name: "Draft a new release" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.3.0 + - uses: actions/checkout@v3.5.3 with: token: ${{ secrets.BOTTY_GITHUB_TOKEN }} @@ -41,8 +41,12 @@ jobs: - name: Commit changelog and manifest files id: make-commit + env: + DPRINT_VERSION: 0.39.1 + RUST_TOOLCHAIN: 1.67 run: | - curl -fsSL https://dprint.dev/install.sh | sh + rustup component add rustfmt --toolchain "$RUST_TOOLCHAIN-x86_64-unknown-linux-gnu" + curl -fsSL https://dprint.dev/install.sh | sh -s $DPRINT_VERSION /home/runner/.dprint/bin/dprint fmt git add CHANGELOG.md Cargo.lock swap/Cargo.toml @@ -54,7 +58,7 @@ jobs: run: git push origin release/${{ github.event.inputs.version }} --force - name: Create pull request - uses: thomaseizinger/create-pull-request@1.3.0 + uses: thomaseizinger/create-pull-request@1.3.1 with: GITHUB_TOKEN: ${{ secrets.BOTTY_GITHUB_TOKEN }} head: release/${{ github.event.inputs.version }} diff --git a/.github/workflows/preview-release.yml b/.github/workflows/preview-release.yml index 180b8ebb..37e04333 100644 --- a/.github/workflows/preview-release.yml +++ b/.github/workflows/preview-release.yml @@ -10,7 +10,7 @@ jobs: name: Create preview release runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.3.0 + - uses: actions/checkout@v3.5.3 - name: Delete 'preview' release uses: larryjoelane/delete-release-action@v1.0.24 diff --git a/CHANGELOG.md b/CHANGELOG.md index 51a1b67a..0768910b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.12.2] - 2023-08-08 + ### Changed -- Minimum Supported Rust Version (MSRV) bumped to 1.63 +- Minimum Supported Rust Version (MSRV) bumped to 1.67 +- ASB can now register with multiple rendezvous nodes. The `rendezvous_point` option in `config.toml` can be a string with comma separated addresses, or a toml array of address strings. ## [0.12.1] - 2023-01-09 @@ -342,7 +345,8 @@ It is possible to migrate critical data from the old db to the sqlite but there - Fixed an issue where Alice would not verify if Bob's Bitcoin lock transaction is semantically correct, i.e. pays the agreed upon amount to an output owned by both of them. Fixing this required a **breaking change** on the network layer and hence old versions are not compatible with this version. -[unreleased]: https://github.com/comit-network/xmr-btc-swap/compare/0.12.1...HEAD +[Unreleased]: https://github.com/comit-network/xmr-btc-swap/compare/0.12.2...HEAD +[0.12.2]: https://github.com/comit-network/xmr-btc-swap/compare/0.12.1...0.12.2 [0.12.1]: https://github.com/comit-network/xmr-btc-swap/compare/0.12.0...0.12.1 [0.12.0]: https://github.com/comit-network/xmr-btc-swap/compare/0.11.0...0.12.0 [0.11.0]: https://github.com/comit-network/xmr-btc-swap/compare/0.10.2...0.11.0 diff --git a/Cargo.lock b/Cargo.lock index 78164564..f0b51599 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -83,9 +83,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.68" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "arrayref" @@ -118,25 +118,15 @@ dependencies = [ "tokio", ] -[[package]] -name = "async-lock" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" -dependencies = [ - "event-listener", - "futures-lite", -] - [[package]] name = "async-trait" -version = "0.1.61" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -176,7 +166,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.18", "libc", "winapi", ] @@ -230,15 +220,15 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.20.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "bdk" -version = "0.25.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e7eb54c6288eca1b698e6e33dd82ebe6c08a93ec1a96bb6926ddceed22c703" +checksum = "e9b650f45ae7dc8558544448253f3e1ae443433637ccd9f9d14d2089ff913480" dependencies = [ "async-trait", "bdk-macros", @@ -263,7 +253,7 @@ checksum = "81c1980e50ae23bb6efa9283ae8679d6ea2c6fa6a99fe62533f65f4a25a1a56c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -272,15 +262,6 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] - [[package]] name = "big-bytes" version = "1.0.0" @@ -437,9 +418,9 @@ dependencies = [ [[package]] name = "borsh" -version = "0.9.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +checksum = "822462c1e7b17b31961798a6874b36daea6818e99e0cb7d3b7b0fa3c477751c3" dependencies = [ "borsh-derive", "hashbrown 0.11.2", @@ -447,37 +428,37 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.9.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +checksum = "37626c9e941a687ee9abef6065b44c379478ae563b7483c613dd705ef1dff59e" dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] name = "borsh-derive-internal" -version = "0.9.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +checksum = "61820b4c5693eafb998b1e67485423c923db4a75f72585c247bdee32bad81e7b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "borsh-schema-derive-internal" -version = "0.9.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +checksum = "c76cdbfa13def20d1f8af3ae7b3c6771f06352a74221d8851262ac384c122b8e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -486,15 +467,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "memchr", -] - [[package]] name = "bumpalo" version = "3.6.1" @@ -519,7 +491,7 @@ checksum = "13e576ebe98e605500b3c8041bb888e966653577172df6dd97398714eb30b9bf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -685,9 +657,9 @@ dependencies = [ [[package]] name = "conquer-once" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c6d3a9775a69f6d1fe2cc888999b67ed30257d3da4d2af91984e722f2ec918a" +checksum = "5d008a441c0f269f36ca13712528069a86a3e60dffee1d98b976eb3b0b2160b4" dependencies = [ "conquer-util", ] @@ -954,7 +926,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn", + "syn 1.0.109", ] [[package]] @@ -965,7 +937,7 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -981,9 +953,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "deranged" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8810e7e2cf385b1e9b50d68264908ec367ba642c96d02edfe61c39e88e2a3c01" [[package]] name = "derive_more" @@ -995,16 +973,17 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 1.0.109", ] [[package]] name = "dialoguer" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92e7e37ecef6857fdc0c0c5d42fd5b0938e46590c2183cc92dd310a6d078eb1" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" dependencies = [ "console", + "shell-words", "tempfile", "zeroize", ] @@ -1147,14 +1126,14 @@ dependencies = [ "heck 0.3.2", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "enum-iterator" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a0ac4aeb3a18f92eaf09c6bb9b3ac30ff61ca95514fc58cbead1c9a6bf5401" +checksum = "91a4ec26efacf4aeff80887a175a419493cb6f8b5480d26387eb0bd038976187" dependencies = [ "enum-iterator-derive", ] @@ -1167,7 +1146,28 @@ checksum = "828de45d0ca18782232dfb8f3ea9cc428e8ced380eb26a520baaacfc70de39ce" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", +] + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", ] [[package]] @@ -1193,7 +1193,7 @@ checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.2.10", "winapi", ] @@ -1248,9 +1248,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] @@ -1273,9 +1273,9 @@ checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "futures" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -1288,9 +1288,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -1298,15 +1298,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -1327,34 +1327,19 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.9", - "waker-fn", -] +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -1370,15 +1355,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-timer" @@ -1388,9 +1373,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1461,7 +1446,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1476,9 +1461,9 @@ dependencies = [ [[package]] name = "git2" -version = "0.15.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ "bitflags", "libc", @@ -1487,24 +1472,11 @@ dependencies = [ "url", ] -[[package]] -name = "globset" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - [[package]] name = "h2" -version = "0.3.11" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -1515,7 +1487,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util", "tracing", ] @@ -1579,6 +1551,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -1591,6 +1569,12 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + [[package]] name = "hmac" version = "0.10.1" @@ -1633,13 +1617,13 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" dependencies = [ "bytes", "fnv", - "itoa", + "itoa 0.4.7", ] [[package]] @@ -1666,9 +1650,9 @@ checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", @@ -1679,7 +1663,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa", + "itoa 1.0.1", "pin-project-lite 0.2.9", "socket2 0.4.7", "tokio", @@ -1690,15 +1674,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" dependencies = [ "http", "hyper", - "rustls 0.20.2", + "rustls 0.21.1", "tokio", - "tokio-rustls 0.23.1", + "tokio-rustls 0.24.0", ] [[package]] @@ -1720,9 +1704,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1771,6 +1755,17 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "io-lifetimes" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "ipconfig" version = "0.2.2" @@ -1798,6 +1793,12 @@ dependencies = [ "either", ] +[[package]] +name = "itoa" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" + [[package]] name = "itoa" version = "1.0.1" @@ -1843,116 +1844,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97c11e429f0eaa41fe659013680b459d2368d8f0a3e69dccfb7a35800b0dc27b" dependencies = [ "quote", - "syn", -] - -[[package]] -name = "jsonrpsee" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" -dependencies = [ - "jsonrpsee-core", - "jsonrpsee-server", - "jsonrpsee-types", - "jsonrpsee-ws-client", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" -dependencies = [ - "futures-util", - "http", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project 1.0.5", - "rustls-native-certs 0.6.2", - "soketto", - "thiserror", - "tokio", - "tokio-rustls 0.23.1", - "tokio-util 0.7.3", - "tracing", - "webpki-roots 0.22.2", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" -dependencies = [ - "anyhow", - "arrayvec", - "async-lock", - "async-trait", - "beef", - "futures-channel", - "futures-timer", - "futures-util", - "globset", - "hyper", - "jsonrpsee-types", - "parking_lot 0.12.0", - "rand 0.8.3", - "rustc-hash", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee-server" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" -dependencies = [ - "futures-channel", - "futures-util", - "http", - "hyper", - "jsonrpsee-core", - "jsonrpsee-types", - "serde", - "serde_json", - "soketto", - "tokio", - "tokio-stream", - "tokio-util 0.7.3", - "tower", - "tracing", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "jsonrpsee-ws-client" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" -dependencies = [ - "http", - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", + "syn 1.0.109", ] [[package]] @@ -1979,15 +1871,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.137" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "libgit2-sys" -version = "0.14.0+1.5.0" +version = "0.14.2+1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a00859c70c8a4f7218e6d1cc32875c4b55f6799445b842b0d8ed5e4c3d959b" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" dependencies = [ "cc", "libc", @@ -1995,6 +1887,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + [[package]] name = "libp2p" version = "0.42.2" @@ -2227,7 +2125,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33b4d0acd47739fe0b570728d8d11bbb535050d84c0cf05d6477a4891fceae10" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2307,6 +2205,12 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "linux-raw-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" + [[package]] name = "lock_api" version = "0.4.6" @@ -2318,9 +2222,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ "cfg-if 1.0.0", ] @@ -2402,9 +2306,9 @@ checksum = "0c835948974f68e0bd58636fc6c5b1fbff7b297e3046f11b3b3c18bbac012c6d" [[package]] name = "miniscript" -version = "8.0.0" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4975078076f0b7b914a3044ad7432d2a7fcec38edb855afdc672e24ca35b69" +checksum = "123a10aae81d0712ecc09b780f6f0ae0b0f506a5c4c912974725760d59ba073e" dependencies = [ "bitcoin", "serde", @@ -2440,7 +2344,7 @@ dependencies = [ "curve25519-dalek-ng", "fixed-hash", "hex", - "hex-literal", + "hex-literal 0.3.4", "keccak-hash", "serde", "serde-big-array", @@ -2479,7 +2383,7 @@ dependencies = [ "anyhow", "curve25519-dalek", "hex", - "hex-literal", + "hex-literal 0.4.1", "jsonrpc_client", "monero", "monero-epee-bin-serde", @@ -2548,7 +2452,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -2671,11 +2575,12 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -2684,7 +2589,7 @@ version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.18", "libc", ] @@ -2707,7 +2612,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f85842b073145726190373213c63f852020fb884c841a3a1f390637267a2fb8c" dependencies = [ "dtoa", - "itoa", + "itoa 1.0.1", "open-metrics-client-derive-text-encode", "owning_ref", ] @@ -2720,7 +2625,7 @@ checksum = "a15c83b586f00268c619c1cb3340ec1a6f59dd9ba1d9833a273a68e6d5cd8ffc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2738,12 +2643,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - [[package]] name = "parking_lot" version = "0.11.2" @@ -2774,7 +2673,7 @@ dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.10", "smallvec", "winapi", ] @@ -2787,7 +2686,7 @@ checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.2.10", "smallvec", "windows-sys 0.32.0", ] @@ -2806,18 +2705,18 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "pem" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ "base64 0.13.1", ] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" @@ -2864,7 +2763,7 @@ checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2875,7 +2774,7 @@ checksum = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2974,7 +2873,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -2991,31 +2890,31 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.0.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0d9cc07f18492d879586c92b485def06bc850da3118075cd45d50e9c95b0e5" +checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" dependencies = [ "bit-set", "bitflags", "byteorder", "lazy_static", "num-traits", - "quick-error 2.0.0", "rand 0.8.3", "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax", "rusty-fork", "tempfile", + "unarray", ] [[package]] @@ -3058,7 +2957,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3088,7 +2987,7 @@ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3107,12 +3006,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-error" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ac73b1112776fc109b2e61909bc46c7e1bf0d7f690ffb1676553acce16d5cda" - [[package]] name = "quicksink" version = "0.1.2" @@ -3126,9 +3019,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -3269,6 +3162,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.0" @@ -3276,7 +3178,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ "getrandom 0.2.6", - "redox_syscall", + "redox_syscall 0.2.10", ] [[package]] @@ -3306,15 +3208,6 @@ version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - [[package]] name = "rend" version = "0.3.6" @@ -3326,11 +3219,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.13" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ - "base64 0.13.1", + "base64 0.21.2", "bytes", "encoding_rs", "futures-core", @@ -3347,19 +3240,20 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite 0.2.9", - "rustls 0.20.2", + "rustls 0.21.1", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", - "tokio-rustls 0.23.1", + "tokio-rustls 0.24.0", "tokio-socks", - "tokio-util 0.7.3", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots 0.22.2", "winreg 0.10.1", @@ -3372,7 +3266,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ "hostname", - "quick-error 1.2.3", + "quick-error", ] [[package]] @@ -3412,14 +3306,14 @@ checksum = "6eaedadc88b53e36dd32d940ed21ae4d850d5916f2581526921f553a72ac34c4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "rust_decimal" -version = "1.27.0" +version = "1.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c321ee4e17d2b7abe12b5d20c1231db708dd36185c8a21e9de5fed6da4dbe9" +checksum = "d0446843641c69436765a35a5a77088e28c2e6a12da93e84aa3ab1cd4aa5a042" dependencies = [ "arrayvec", "borsh", @@ -3435,20 +3329,14 @@ dependencies = [ [[package]] name = "rust_decimal_macros" -version = "1.27.0" +version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a7e2dba1342e9f1166786a4329ba0d6d6b8d9db7e81d702ec9ba3b39591ddff" +checksum = "0e773fd3da1ed42472fdf3cfdb4972948a555bc3d73f5e0bdb99d17e7b54c687" dependencies = [ "quote", "rust_decimal", ] -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hex" version = "2.1.0" @@ -3470,6 +3358,20 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.37.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + [[package]] name = "rustls" version = "0.19.0" @@ -3495,6 +3397,18 @@ dependencies = [ "webpki 0.22.0", ] +[[package]] +name = "rustls" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct 0.7.0", +] + [[package]] name = "rustls-native-certs" version = "0.5.0" @@ -3507,18 +3421,6 @@ dependencies = [ "security-framework", ] -[[package]] -name = "rustls-native-certs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pemfile" version = "1.0.0" @@ -3529,10 +3431,20 @@ dependencies = [ ] [[package]] -name = "rustversion" -version = "1.0.9" +name = "rustls-webpki" +version = "0.100.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "rusty-fork" @@ -3541,7 +3453,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" dependencies = [ "fnv", - "quick-error 1.2.3", + "quick-error", "tempfile", "wait-timeout", ] @@ -3679,26 +3591,11 @@ dependencies = [ "pest", ] -[[package]] -name = "sequential-macro" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5facc5f409a55d25bf271c853402a00e1187097d326757043f5dd711944d07" - -[[package]] -name = "sequential-test" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d9c0d773bc7e7733264f460e5dfa00b2510421ddd6284db0749eef8dfb79e9" -dependencies = [ - "sequential-macro", -] - [[package]] name = "serde" -version = "1.0.152" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" dependencies = [ "serde_derive", ] @@ -3725,22 +3622,22 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ - "itoa", + "itoa 1.0.1", "ryu", "serde", ] @@ -3752,7 +3649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa", + "itoa 1.0.1", "ryu", "serde", ] @@ -3776,14 +3673,14 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "serial_test" -version = "0.10.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c789ec87f4687d022a2405cf46e0cd6284889f1839de292cadeb6c6019506f2" +checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" dependencies = [ "dashmap", "futures", @@ -3795,13 +3692,13 @@ dependencies = [ [[package]] name = "serial_test_derive" -version = "0.10.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64f9e531ce97c88b4778aad0ceee079216071cffec6ac9b904277f8f92e7fe3" +checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -3862,6 +3759,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "sigma_fun" version = "0.4.1" @@ -3980,15 +3883,14 @@ dependencies = [ [[package]] name = "soketto" -version = "0.7.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +checksum = "083624472e8817d44d02c0e55df043737ff11f279af924abdf93845717c2b75c" dependencies = [ "base64 0.13.1", "bytes", "flate2", "futures", - "http", "httparse", "log", "rand 0.8.3", @@ -4032,9 +3934,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9249290c05928352f71c077cc44a464d880c63f26f7534728cca008e135c0428" +checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188" dependencies = [ "sqlx-core", "sqlx-macros", @@ -4042,9 +3944,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105" +checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029" dependencies = [ "ahash", "atoi", @@ -4065,7 +3967,7 @@ dependencies = [ "hashlink", "hex", "indexmap", - "itoa", + "itoa 1.0.1", "libc", "libsqlite3-sys", "log", @@ -4089,9 +3991,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b850fa514dc11f2ee85be9d055c512aa866746adfacd1cb42d867d68e6a5b0d9" +checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9" dependencies = [ "dotenvy", "either", @@ -4105,15 +4007,15 @@ dependencies = [ "sha2 0.10.6", "sqlx-core", "sqlx-rt", - "syn", + "syn 1.0.109", "url", ] [[package]] name = "sqlx-rt" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c5b2d25fa654cc5f841750b8e1cdedbe21189bf9a9382ee90bfa9dd3562396" +checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" dependencies = [ "once_cell", "tokio", @@ -4175,7 +4077,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4197,7 +4099,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -4214,14 +4116,14 @@ checksum = "8049cf85f0e715d6af38dde439cb0ccb91f67fb9f5f63c80f8b43e48356e1a3f" [[package]] name = "swap" -version = "0.12.1" +version = "0.12.2" dependencies = [ "anyhow", "async-compression", "async-trait", "atty", "backoff", - "base64 0.20.0", + "base64 0.21.2", "bdk", "big-bytes", "bitcoin", @@ -4241,9 +4143,6 @@ dependencies = [ "hex", "hyper", "itertools", - "jsonrpsee", - "jsonrpsee-core", - "jsonrpsee-types", "libp2p", "monero", "monero-harness", @@ -4257,7 +4156,6 @@ dependencies = [ "reqwest", "rust_decimal", "rust_decimal_macros", - "sequential-test", "serde", "serde_cbor", "serde_json", @@ -4272,12 +4170,12 @@ dependencies = [ "tempfile", "testcontainers 0.12.0", "thiserror", - "time 0.3.17", + "time 0.3.24", "tokio", "tokio-socks", "tokio-tar", "tokio-tungstenite", - "tokio-util 0.7.3", + "tokio-util", "toml", "torut", "tracing", @@ -4293,9 +4191,20 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.104" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" dependencies = [ "proc-macro2", "quote", @@ -4310,22 +4219,22 @@ checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] [[package]] name = "tempfile" -version = "3.3.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" dependencies = [ + "autocfg", "cfg-if 1.0.0", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.48.0", ] [[package]] @@ -4381,22 +4290,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -4420,11 +4329,12 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "b79eabcd964882a646b3584543ccabeae7869e9ac32a46f6f22b7a5bd405308b" dependencies = [ - "itoa", + "deranged", + "itoa 1.0.1", "serde", "time-core", "time-macros", @@ -4432,15 +4342,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd" dependencies = [ "time-core", ] @@ -4497,7 +4407,7 @@ checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4522,6 +4432,16 @@ dependencies = [ "webpki 0.22.0", ] +[[package]] +name = "tokio-rustls" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5" +dependencies = [ + "rustls 0.21.1", + "tokio", +] + [[package]] name = "tokio-socks" version = "0.5.1" @@ -4554,7 +4474,7 @@ dependencies = [ "filetime", "futures-core", "libc", - "redox_syscall", + "redox_syscall 0.2.10", "tokio", "tokio-stream", "xattr", @@ -4577,20 +4497,6 @@ dependencies = [ "webpki-roots 0.21.0", ] -[[package]] -name = "tokio-util" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite 0.2.9", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.3" @@ -4599,7 +4505,6 @@ checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" dependencies = [ "bytes", "futures-core", - "futures-io", "futures-sink", "pin-project-lite 0.2.9", "tokio", @@ -4608,9 +4513,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -4633,23 +4538,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - [[package]] name = "tower-service" version = "0.3.1" @@ -4658,12 +4546,10 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "cf9cf6a813d3f40c88b0b6b6f29a5c95c6cdbf97c1f9cc53fb820200f5ad814d" dependencies = [ - "cfg-if 1.0.0", - "log", "pin-project-lite 0.2.9", "tracing-attributes", "tracing-core", @@ -4676,19 +4562,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e" dependencies = [ "crossbeam-channel", - "time 0.3.17", + "time 0.3.24", "tracing-subscriber 0.3.15", ] [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -4766,7 +4652,7 @@ dependencies = [ "serde_json", "sharded-slab", "thread_local", - "time 0.3.17", + "time 0.3.24", "tracing", "tracing-core", "tracing-log", @@ -4838,7 +4724,7 @@ dependencies = [ "log", "rand 0.8.3", "rustls 0.19.0", - "rustls-native-certs 0.5.0", + "rustls-native-certs", "sha-1", "thiserror", "url", @@ -4871,13 +4757,16 @@ dependencies = [ ] [[package]] -name = "unicode-bidi" -version = "0.3.4" +name = "unarray" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -dependencies = [ - "matches", -] +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -4887,9 +4776,9 @@ checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" [[package]] name = "unicode-normalization" -version = "0.1.17" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] @@ -4948,12 +4837,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.4.0", "percent-encoding", "serde", ] @@ -4966,9 +4855,9 @@ checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" [[package]] name = "uuid" -version = "1.2.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom 0.2.6", "serde", @@ -4994,9 +4883,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "vergen" -version = "7.4.4" +version = "7.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efadd36bc6fde40c6048443897d69511a19161c0756cb704ed403f8dfd2b7d1c" +checksum = "f21b881cd6636ece9735721cf03c1fe1e774fe258683d084bb2812ab67435749" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -5005,7 +4894,7 @@ dependencies = [ "git2", "rustversion", "thiserror", - "time 0.3.17", + "time 0.3.24", ] [[package]] @@ -5029,12 +4918,6 @@ dependencies = [ "libc", ] -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - [[package]] name = "want" version = "0.3.0" @@ -5065,9 +4948,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.71" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -5075,16 +4958,16 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.71" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -5102,9 +4985,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.71" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5112,22 +4995,35 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.71" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.71" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + +[[package]] +name = "wasm-streams" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] [[package]] name = "web-sys" @@ -5241,6 +5137,36 @@ dependencies = [ "windows_x86_64_msvc 0.36.1", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.32.0" @@ -5253,6 +5179,12 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_i686_gnu" version = "0.32.0" @@ -5265,6 +5197,12 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.32.0" @@ -5277,6 +5215,12 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_x86_64_gnu" version = "0.32.0" @@ -5289,6 +5233,18 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.32.0" @@ -5301,6 +5257,12 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "winreg" version = "0.6.2" @@ -5370,7 +5332,7 @@ checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] diff --git a/README.md b/README.md index 3e6c3765..7cbccc5a 100644 --- a/README.md +++ b/README.md @@ -44,13 +44,13 @@ It is not recommended to bump fees when swapping because it can have unpredictab ## Contributing -We are encourage community contributions whether it be a bug fix or an improvement to the documentation. +We encourage community contributions whether it be a bug fix or an improvement to the documentation. Please have a look at the [contribution guidelines](./CONTRIBUTING.md). ## Rust Version Support Please note that only the latest stable Rust toolchain is supported. -All stable toolchains since 1.63 _should_ work. +All stable toolchains since 1.67 _should_ work. ## Contact diff --git a/docs/asb/README.md b/docs/asb/README.md index e0991d8d..16e0a602 100644 --- a/docs/asb/README.md +++ b/docs/asb/README.md @@ -42,13 +42,16 @@ Since the ASB is a long running task we specify the person running an ASB as ser The ASB daemon supports the libp2p [rendezvous-protocol](https://github.com/libp2p/specs/tree/master/rendezvous). Usage of the rendezvous functionality is entirely optional. -You can configure a rendezvous point in the `[network]` section of your config file. +You can configure one or more rendezvous points in the `[network]` section of your config file. For the registration to be successful, you also need to configure the externally reachable addresses within the `[network]` section. For example: ```toml [network] -rendezvous_point = "/dns4/discover.unstoppableswap.net/tcp/8888/p2p/12D3KooWA6cnqJpVnreBVnoro8midDL9Lpzmg8oJPoAGi7YYaamE" +rendezvous_point = [ + "/dns4/discover.unstoppableswap.net/tcp/8888/p2p/12D3KooWA6cnqJpVnreBVnoro8midDL9Lpzmg8oJPoAGi7YYaamE", + "/dns4/eratosthen.es/tcp/7798/p2p/12D3KooWAh7EXXa2ZyegzLGdjvj1W4G3EXrTGrf6trraoT1MEobs", +] external_addresses = ["/dns4/example.com/tcp/9939"] ``` diff --git a/dprint.json b/dprint.json index 18c300b2..8f18b0bf 100644 --- a/dprint.json +++ b/dprint.json @@ -3,22 +3,16 @@ "projectType": "openSource", "incremental": true, "markdown": {}, - "rustfmt": { - "edition": 2021, - "condense_wildcard_suffixes": true, - "format_macro_matchers": true, - "imports_granularity": "Module", - "use_field_init_shorthand": true, - "format_code_in_doc_comments": true, - "normalize_comments": true, - "wrap_comments": true, - "overflow_delimited_expr": true + "exec": { + "associations": "**/*.{rs}", + "rustfmt": "rustfmt --edition 2021", + "rustfmt.associations": "**/*.rs" }, "includes": ["**/*.{md}", "**/*.{toml}", "**/*.{rs}"], "excludes": ["target/"], "plugins": [ "https://plugins.dprint.dev/markdown-0.13.1.wasm", "https://github.com/thomaseizinger/dprint-plugin-cargo-toml/releases/download/0.1.0/cargo-toml-0.1.0.wasm", - "https://plugins.dprint.dev/rustfmt-0.6.1.exe-plugin@99b89a0599fd3a63e597e03436862157901f3facae2f0c2fbd0b9f656cdbc2a5" + "https://plugins.dprint.dev/exec-0.3.5.json@d687dda57be0fe9a0088ccdaefa5147649ff24127d8b3ea227536c68ee7abeab" ] } diff --git a/monero-harness/src/lib.rs b/monero-harness/src/lib.rs index f762d5c5..46a03002 100644 --- a/monero-harness/src/lib.rs +++ b/monero-harness/src/lib.rs @@ -249,7 +249,7 @@ impl<'c> Monerod { /// address pub async fn start_miner(&self, miner_wallet_address: &str) -> Result<()> { let monerod = self.client().clone(); - let _ = tokio::spawn(mine(monerod, miner_wallet_address.to_string())); + tokio::spawn(mine(monerod, miner_wallet_address.to_string())); Ok(()) } } diff --git a/monero-rpc/Cargo.toml b/monero-rpc/Cargo.toml index 427345d6..6da1e88a 100644 --- a/monero-rpc/Cargo.toml +++ b/monero-rpc/Cargo.toml @@ -19,5 +19,5 @@ serde_json = "1.0" tracing = "0.1" [dev-dependencies] -hex-literal = "0.3" +hex-literal = "0.4" tokio = { version = "1", features = [ "full" ] } diff --git a/monero-rpc/src/monerod.rs b/monero-rpc/src/monerod.rs index 5aef523f..debb999f 100644 --- a/monero-rpc/src/monerod.rs +++ b/monero-rpc/src/monerod.rs @@ -47,9 +47,10 @@ impl Client { } pub async fn get_o_indexes(&self, txid: Hash) -> Result { - self.binary_request(self.get_o_indexes_bin_url.clone(), GetOIndexesPayload { - txid, - }) + self.binary_request( + self.get_o_indexes_bin_url.clone(), + GetOIndexesPayload { txid }, + ) .await } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 8e45b7f1..d6b509dd 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.63" # also update this in the readme, changelog, and github actions +channel = "1.67" # also update this in the readme, changelog, and github actions components = ["clippy"] targets = ["armv7-unknown-linux-gnueabihf"] diff --git a/swap/Cargo.toml b/swap/Cargo.toml index 39651e52..f2075aff 100644 --- a/swap/Cargo.toml +++ b/swap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "swap" -version = "0.12.1" +version = "0.12.2" authors = [ "The COMIT guys " ] edition = "2021" description = "XMR/BTC trustless atomic swaps." @@ -14,16 +14,16 @@ async-compression = { version = "0.3", features = [ "bzip2", "tokio" ] } async-trait = "0.1" atty = "0.2" backoff = { version = "0.4", features = [ "tokio" ] } -base64 = "0.20" -bdk = "0.25" +base64 = "0.21" +bdk = "0.28" big-bytes = "1" bitcoin = { version = "0.29", features = [ "rand", "serde" ] } bmrng = "0.5" comfy-table = "6.1" config = { version = "0.13", default-features = false, features = [ "toml" ] } -conquer-once = "0.3" +conquer-once = "0.4" curve25519-dalek = { package = "curve25519-dalek-ng", version = "4" } -data-encoding = "2.3" +data-encoding = "2.4" dialoguer = "0.10" directories-next = "2" ecdsa_fun = { git = "https://github.com/LLFourn/secp256kfun", default-features = false, features = [ "libsecp_compat", "serde", "adaptor" ] } @@ -66,7 +66,7 @@ tracing-appender = "0.2" tracing-futures = { version = "0.2", features = [ "std-future", "futures-03" ] } tracing-subscriber = { version = "0.3", default-features = false, features = [ "fmt", "ansi", "env-filter", "time", "tracing-log", "json" ] } url = { version = "2", features = [ "serde" ] } -uuid = { version = "1.2", features = [ "serde", "v4" ] } +uuid = { version = "1.4", features = [ "serde", "v4" ] } void = "1" [target.'cfg(not(windows))'.dependencies] @@ -86,11 +86,11 @@ port_check = "0.1" proptest = "1" sequential-test = "0.2.4" serde_cbor = "0.11" -serial_test = "0.10" +serial_test = "2.0" spectral = "0.6" tempfile = "3" testcontainers = "0.12" [build-dependencies] anyhow = "1" -vergen = { version = "7", default-features = false, features = [ "git", "build" ] } +vergen = { version = "7.5", default-features = false, features = [ "git", "build" ] } diff --git a/swap/src/asb.rs b/swap/src/asb.rs index fccd2f8b..b5ed8ac1 100644 --- a/swap/src/asb.rs +++ b/swap/src/asb.rs @@ -8,6 +8,7 @@ pub mod tracing; pub use event_loop::{EventLoop, EventLoopHandle, FixedRate, KrakenRate, LatestRate}; pub use network::behaviour::{Behaviour, OutEvent}; +pub use network::rendezvous::RendezvousNode; pub use network::transport; pub use rate::Rate; pub use recovery::cancel::cancel; @@ -18,4 +19,4 @@ pub use recovery::safely_abort::safely_abort; pub use recovery::{cancel, refund}; #[cfg(test)] -pub use network::rendezous; +pub use network::rendezvous; diff --git a/swap/src/asb/config.rs b/swap/src/asb/config.rs index 7e8492ec..ac651c71 100644 --- a/swap/src/asb/config.rs +++ b/swap/src/asb/config.rs @@ -134,8 +134,8 @@ pub struct Data { pub struct Network { #[serde(deserialize_with = "addr_list::deserialize")] pub listen: Vec, - #[serde(default)] - pub rendezvous_point: Option, + #[serde(default, deserialize_with = "addr_list::deserialize")] + pub rendezvous_point: Vec, #[serde(default, deserialize_with = "addr_list::deserialize")] pub external_addresses: Vec, } @@ -156,7 +156,7 @@ mod addr_list { let list: Result, _> = s .split(',') .filter(|s| !s.is_empty()) - .map(|s| s.parse().map_err(de::Error::custom)) + .map(|s| s.trim().parse().map_err(de::Error::custom)) .collect(); Ok(list?) } @@ -165,7 +165,7 @@ mod addr_list { .iter() .map(|v| { if let Value::String(s) = v { - s.parse().map_err(de::Error::custom) + s.trim().parse().map_err(de::Error::custom) } else { Err(de::Error::custom("expected a string")) } @@ -347,10 +347,27 @@ pub fn query_user_for_initial_config(testnet: bool) -> Result { } let ask_spread = Decimal::from_f64(ask_spread).context("Unable to parse spread")?; - let rendezvous_point = Input::::with_theme(&ColorfulTheme::default()) - .with_prompt("Do you want to advertise your ASB instance with a rendezvous node? Enter an empty string if not.") - .allow_empty(true) - .interact_text()?; + let mut number = 1; + let mut done = false; + let mut rendezvous_points = Vec::new(); + println!("ASB can register with multiple rendezvous nodes for discoverability. This can also be edited in the config file later."); + while !done { + let prompt = format!( + "Enter the address for rendezvous node ({number}). Or just hit Enter to continue." + ); + let rendezvous_addr = Input::::with_theme(&ColorfulTheme::default()) + .with_prompt(prompt) + .allow_empty(true) + .interact_text()?; + if rendezvous_addr.is_empty() { + done = true; + } else if rendezvous_points.contains(&rendezvous_addr) { + println!("That rendezvous address is already in the list."); + } else { + rendezvous_points.push(rendezvous_addr); + number += 1; + } + } println!(); @@ -358,11 +375,7 @@ pub fn query_user_for_initial_config(testnet: bool) -> Result { data: Data { dir: data_dir }, network: Network { listen: listen_addresses, - rendezvous_point: if rendezvous_point.is_empty() { - None - } else { - Some(rendezvous_point) - }, + rendezvous_point: rendezvous_points, // keeping the singular key name for backcompat external_addresses: vec![], }, bitcoin: Bitcoin { @@ -417,7 +430,7 @@ mod tests { }, network: Network { listen: vec![defaults.listen_address_tcp, defaults.listen_address_ws], - rendezvous_point: None, + rendezvous_point: vec![], external_addresses: vec![], }, monero: Monero { @@ -461,7 +474,7 @@ mod tests { }, network: Network { listen: vec![defaults.listen_address_tcp, defaults.listen_address_ws], - rendezvous_point: None, + rendezvous_point: vec![], external_addresses: vec![], }, monero: Monero { @@ -515,7 +528,7 @@ mod tests { }, network: Network { listen, - rendezvous_point: None, + rendezvous_point: vec![], external_addresses, }, monero: Monero { diff --git a/swap/src/asb/event_loop.rs b/swap/src/asb/event_loop.rs index 130494bc..4083f130 100644 --- a/swap/src/asb/event_loop.rs +++ b/swap/src/asb/event_loop.rs @@ -253,8 +253,8 @@ where channel }.boxed()); } - SwarmEvent::Behaviour(OutEvent::Rendezvous(libp2p::rendezvous::client::Event::Registered { .. })) => { - tracing::info!("Successfully registered with rendezvous node"); + SwarmEvent::Behaviour(OutEvent::Rendezvous(libp2p::rendezvous::client::Event::Registered { rendezvous_node, ttl, namespace })) => { + tracing::info!("Successfully registered with rendezvous node: {} with namespace: {} and TTL: {:?}", rendezvous_node, namespace, ttl); } SwarmEvent::Behaviour(OutEvent::Rendezvous(libp2p::rendezvous::client::Event::RegisterFailed(error))) => { tracing::error!("Registration with rendezvous node failed: {:?}", error); diff --git a/swap/src/asb/network.rs b/swap/src/asb/network.rs index 41b62c31..181ec9bc 100644 --- a/swap/src/asb/network.rs +++ b/swap/src/asb/network.rs @@ -44,7 +44,9 @@ pub mod transport { } pub mod behaviour { - use super::*; + use libp2p::swarm::behaviour::toggle::Toggle; + + use super::{rendezvous::RendezvousNode, *}; #[allow(clippy::large_enum_variant)] #[derive(Debug)] @@ -108,7 +110,7 @@ pub mod behaviour { where LR: LatestRate + Send + 'static, { - pub rendezvous: libp2p::swarm::behaviour::toggle::Toggle, + pub rendezvous: Toggle, pub quote: quote::Behaviour, pub swap_setup: alice::Behaviour, pub transfer_proof: transfer_proof::Behaviour, @@ -132,25 +134,22 @@ pub mod behaviour { resume_only: bool, env_config: env::Config, identify_params: (identity::Keypair, XmrBtcNamespace), - rendezvous_params: Option<(identity::Keypair, PeerId, Multiaddr, XmrBtcNamespace)>, + rendezvous_nodes: Vec, ) -> Self { - let agentVersion = format!("asb/{} ({})", env!("CARGO_PKG_VERSION"), identify_params.1); - let protocolVersion = "/comit/xmr/btc/1.0.0".to_string(); - let identifyConfig = IdentifyConfig::new(protocolVersion, identify_params.0.public()) - .with_agent_version(agentVersion); + let (identity, namespace) = identify_params; + let agent_version = format!("asb/{} ({})", env!("CARGO_PKG_VERSION"), namespace); + let protocol_version = "/comit/xmr/btc/1.0.0".to_string(); + let identifyConfig = IdentifyConfig::new(protocol_version, identity.public()) + .with_agent_version(agent_version); + + let behaviour = if rendezvous_nodes.is_empty() { + None + } else { + Some(rendezvous::Behaviour::new(identity, rendezvous_nodes)) + }; Self { - rendezvous: libp2p::swarm::behaviour::toggle::Toggle::from(rendezvous_params.map( - |(identity, rendezvous_peer_id, rendezvous_address, namespace)| { - rendezous::Behaviour::new( - identity, - rendezvous_peer_id, - rendezvous_address, - namespace, - None, // use default ttl on rendezvous point - ) - }, - )), + rendezvous: Toggle::from(behaviour), quote: quote::asb(), swap_setup: alice::Behaviour::new( min_buy, @@ -186,13 +185,14 @@ pub mod behaviour { } } -pub mod rendezous { +pub mod rendezvous { use super::*; use libp2p::swarm::dial_opts::DialOpts; use libp2p::swarm::DialError; + use std::collections::VecDeque; use std::pin::Pin; - #[derive(PartialEq)] + #[derive(Clone, PartialEq)] enum ConnectionStatus { Disconnected, Dialling, @@ -209,39 +209,59 @@ pub mod rendezous { pub struct Behaviour { inner: libp2p::rendezvous::client::Behaviour, - rendezvous_point: Multiaddr, - rendezvous_peer_id: PeerId, - namespace: XmrBtcNamespace, - registration_status: RegistrationStatus, - connection_status: ConnectionStatus, - registration_ttl: Option, + rendezvous_nodes: Vec, + to_dial: VecDeque, } - impl Behaviour { + pub struct RendezvousNode { + pub address: Multiaddr, + connection_status: ConnectionStatus, + pub peer_id: PeerId, + registration_status: RegistrationStatus, + pub registration_ttl: Option, + pub namespace: XmrBtcNamespace, + } + + impl RendezvousNode { pub fn new( - identity: identity::Keypair, - rendezvous_peer_id: PeerId, - rendezvous_address: Multiaddr, + address: &Multiaddr, + peer_id: PeerId, namespace: XmrBtcNamespace, registration_ttl: Option, ) -> Self { Self { - inner: libp2p::rendezvous::client::Behaviour::new(identity), - rendezvous_point: rendezvous_address, - rendezvous_peer_id, - namespace, - registration_status: RegistrationStatus::RegisterOnNextConnection, + address: address.to_owned(), connection_status: ConnectionStatus::Disconnected, + namespace, + peer_id, + registration_status: RegistrationStatus::RegisterOnNextConnection, registration_ttl, } } - fn register(&mut self) { - self.inner.register( - self.namespace.into(), - self.rendezvous_peer_id, - self.registration_ttl, - ); + fn set_connection(&mut self, status: ConnectionStatus) { + self.connection_status = status; + } + + fn set_registration(&mut self, status: RegistrationStatus) { + self.registration_status = status; + } + } + + impl Behaviour { + pub fn new(identity: identity::Keypair, rendezvous_nodes: Vec) -> Self { + Self { + inner: libp2p::rendezvous::client::Behaviour::new(identity), + rendezvous_nodes, + to_dial: VecDeque::new(), + } + } + + /// Calls the rendezvous register method of the node at node_index in the Vec of rendezvous nodes + fn register(&mut self, node_index: usize) { + let node = &self.rendezvous_nodes[node_index]; + self.inner + .register(node.namespace.into(), node.peer_id, node.registration_ttl); } } @@ -255,31 +275,37 @@ pub mod rendezous { } fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec { - if peer_id == &self.rendezvous_peer_id { - return vec![self.rendezvous_point.clone()]; + for node in self.rendezvous_nodes.iter() { + if peer_id == &node.peer_id { + return vec![node.address.clone()]; + } } vec![] } fn inject_connected(&mut self, peer_id: &PeerId) { - if peer_id == &self.rendezvous_peer_id { - self.connection_status = ConnectionStatus::Connected; - - match &self.registration_status { - RegistrationStatus::RegisterOnNextConnection => { - self.register(); - self.registration_status = RegistrationStatus::Pending; + for i in 0..self.rendezvous_nodes.len() { + if peer_id == &self.rendezvous_nodes[i].peer_id { + self.rendezvous_nodes[i].set_connection(ConnectionStatus::Connected); + match &self.rendezvous_nodes[i].registration_status { + RegistrationStatus::RegisterOnNextConnection => { + self.register(i); + self.rendezvous_nodes[i].set_registration(RegistrationStatus::Pending); + } + RegistrationStatus::Registered { .. } => {} + RegistrationStatus::Pending => {} } - RegistrationStatus::Registered { .. } => {} - RegistrationStatus::Pending => {} } } } fn inject_disconnected(&mut self, peer_id: &PeerId) { - if peer_id == &self.rendezvous_peer_id { - self.connection_status = ConnectionStatus::Disconnected; + for i in 0..self.rendezvous_nodes.len() { + let mut node = &mut self.rendezvous_nodes[i]; + if peer_id == &node.peer_id { + node.connection_status = ConnectionStatus::Disconnected; + } } } @@ -298,9 +324,12 @@ pub mod rendezous { _handler: Self::ProtocolsHandler, _error: &DialError, ) { - if let Some(id) = peer_id { - if id == self.rendezvous_peer_id { - self.connection_status = ConnectionStatus::Disconnected; + for i in 0..self.rendezvous_nodes.len() { + let mut node = &mut self.rendezvous_nodes[i]; + if let Some(id) = peer_id { + if id == node.peer_id { + node.connection_status = ConnectionStatus::Disconnected; + } } } } @@ -311,62 +340,73 @@ pub mod rendezous { cx: &mut std::task::Context<'_>, params: &mut impl PollParameters, ) -> Poll> { - match &mut self.registration_status { - RegistrationStatus::RegisterOnNextConnection => match self.connection_status { - ConnectionStatus::Disconnected => { - self.connection_status = ConnectionStatus::Dialling; + if let Some(peer_id) = self.to_dial.pop_front() { + return Poll::Ready(NetworkBehaviourAction::Dial { + opts: DialOpts::peer_id(peer_id) + .condition(PeerCondition::Disconnected) + .build(), - return Poll::Ready(NetworkBehaviourAction::Dial { - opts: DialOpts::peer_id(self.rendezvous_peer_id) - .condition(PeerCondition::Disconnected) - .build(), - - handler: Self::ProtocolsHandler::new(Duration::from_secs(30)), - }); - } - ConnectionStatus::Dialling => {} - ConnectionStatus::Connected => { - self.registration_status = RegistrationStatus::Pending; - self.register(); - } - }, - RegistrationStatus::Registered { re_register_in } => { - if let Poll::Ready(()) = re_register_in.poll_unpin(cx) { - match self.connection_status { - ConnectionStatus::Connected => { - self.registration_status = RegistrationStatus::Pending; - self.register(); + handler: Self::ProtocolsHandler::new(Duration::from_secs(30)), + }); + } + // check the status of each rendezvous node + for i in 0..self.rendezvous_nodes.len() { + let connection_status = self.rendezvous_nodes[i].connection_status.clone(); + match &mut self.rendezvous_nodes[i].registration_status { + RegistrationStatus::RegisterOnNextConnection => match connection_status { + ConnectionStatus::Disconnected => { + self.rendezvous_nodes[i].set_connection(ConnectionStatus::Dialling); + self.to_dial.push_back(self.rendezvous_nodes[i].peer_id); + } + ConnectionStatus::Dialling => {} + ConnectionStatus::Connected => { + self.rendezvous_nodes[i].set_registration(RegistrationStatus::Pending); + self.register(i); + } + }, + RegistrationStatus::Registered { re_register_in } => { + if let Poll::Ready(()) = re_register_in.poll_unpin(cx) { + match connection_status { + ConnectionStatus::Connected => { + self.rendezvous_nodes[i] + .set_registration(RegistrationStatus::Pending); + self.register(i); + } + ConnectionStatus::Disconnected => { + self.rendezvous_nodes[i].set_registration( + RegistrationStatus::RegisterOnNextConnection, + ); + self.to_dial.push_back(self.rendezvous_nodes[i].peer_id); + } + ConnectionStatus::Dialling => {} } - ConnectionStatus::Disconnected => { - self.registration_status = - RegistrationStatus::RegisterOnNextConnection; - - return Poll::Ready(NetworkBehaviourAction::Dial { - opts: DialOpts::peer_id(self.rendezvous_peer_id) - .condition(PeerCondition::Disconnected) - .build(), - handler: Self::ProtocolsHandler::new(Duration::from_secs(30)), - }); - } - ConnectionStatus::Dialling => {} } } + RegistrationStatus::Pending => {} } - RegistrationStatus::Pending => {} } let inner_poll = self.inner.poll(cx, params); - // reset the timer if we successfully registered + // reset the timer for the specific rendezvous node if we successfully registered if let Poll::Ready(NetworkBehaviourAction::GenerateEvent( - libp2p::rendezvous::client::Event::Registered { ttl, .. }, + libp2p::rendezvous::client::Event::Registered { + ttl, + rendezvous_node, + .. + }, )) = &inner_poll { - let half_of_ttl = Duration::from_secs(*ttl) / 2; - - self.registration_status = RegistrationStatus::Registered { - re_register_in: Box::pin(tokio::time::sleep(half_of_ttl)), - }; + if let Some(i) = self + .rendezvous_nodes + .iter() + .position(|n| &n.peer_id == rendezvous_node) + { + let half_of_ttl = Duration::from_secs(*ttl) / 2; + let re_register_in = Box::pin(tokio::time::sleep(half_of_ttl)); + let status = RegistrationStatus::Registered { re_register_in }; + self.rendezvous_nodes[i].set_registration(status); + } } inner_poll @@ -380,6 +420,7 @@ pub mod rendezous { use futures::StreamExt; use libp2p::rendezvous; use libp2p::swarm::SwarmEvent; + use std::collections::HashMap; #[tokio::test] async fn given_no_initial_connection_when_constructed_asb_connects_and_registers_with_rendezvous_node( @@ -387,16 +428,16 @@ pub mod rendezous { let mut rendezvous_node = new_swarm(|_, _| { rendezvous::server::Behaviour::new(rendezvous::server::Config::default()) }); - let rendezvous_address = rendezvous_node.listen_on_random_memory_address().await; + let address = rendezvous_node.listen_on_random_memory_address().await; + let rendezvous_point = RendezvousNode::new( + &address, + rendezvous_node.local_peer_id().to_owned(), + XmrBtcNamespace::Testnet, + None, + ); let mut asb = new_swarm(|_, identity| { - rendezous::Behaviour::new( - identity, - *rendezvous_node.local_peer_id(), - rendezvous_address, - XmrBtcNamespace::Testnet, - None, - ) + super::rendezvous::Behaviour::new(identity, vec![rendezvous_point]) }); asb.listen_on_random_memory_address().await; // this adds an external address @@ -428,16 +469,16 @@ pub mod rendezous { rendezvous::server::Config::default().with_min_ttl(2), ) }); - let rendezvous_address = rendezvous_node.listen_on_random_memory_address().await; + let address = rendezvous_node.listen_on_random_memory_address().await; + let rendezvous_point = RendezvousNode::new( + &address, + rendezvous_node.local_peer_id().to_owned(), + XmrBtcNamespace::Testnet, + Some(5), + ); let mut asb = new_swarm(|_, identity| { - rendezous::Behaviour::new( - identity, - *rendezvous_node.local_peer_id(), - rendezvous_address, - XmrBtcNamespace::Testnet, - Some(5), - ) + super::rendezvous::Behaviour::new(identity, vec![rendezvous_point]) }); asb.listen_on_random_memory_address().await; // this adds an external address @@ -467,5 +508,62 @@ pub mod rendezous { .unwrap() .unwrap(); } + + #[tokio::test] + async fn asb_registers_multiple() { + let registration_ttl = Some(10); + let mut rendezvous_nodes = Vec::new(); + let mut registrations = HashMap::new(); + // register with 5 rendezvous nodes + for _ in 0..5 { + let mut rendezvous = new_swarm(|_, _| { + rendezvous::server::Behaviour::new( + rendezvous::server::Config::default().with_min_ttl(2), + ) + }); + let address = rendezvous.listen_on_random_memory_address().await; + let id = *rendezvous.local_peer_id(); + registrations.insert(id, 0); + rendezvous_nodes.push(RendezvousNode::new( + &address, + *rendezvous.local_peer_id(), + XmrBtcNamespace::Testnet, + registration_ttl, + )); + tokio::spawn(async move { + loop { + rendezvous.next().await; + } + }); + } + + let mut asb = new_swarm(|_, identity| { + super::rendezvous::Behaviour::new(identity, rendezvous_nodes) + }); + asb.listen_on_random_memory_address().await; // this adds an external address + + let handle = tokio::spawn(async move { + loop { + if let SwarmEvent::Behaviour(rendezvous::client::Event::Registered { + rendezvous_node, + .. + }) = asb.select_next_some().await + { + registrations + .entry(rendezvous_node) + .and_modify(|counter| *counter += 1); + } + + if registrations.iter().all(|(_, &count)| count >= 4) { + break; + } + } + }); + + tokio::time::timeout(Duration::from_secs(30), handle) + .await + .unwrap() + .unwrap(); + } } } diff --git a/swap/src/bin/asb.rs b/swap/src/bin/asb.rs index d05a0dbb..ff3b0e4c 100644 --- a/swap/src/bin/asb.rs +++ b/swap/src/bin/asb.rs @@ -102,6 +102,19 @@ async fn main() -> Result<()> { match cmd { Command::Start { resume_only } => { + // check and warn for duplicate rendezvous points + let mut rendezvous_addrs = config.network.rendezvous_point.clone(); + let prev_len = rendezvous_addrs.len(); + rendezvous_addrs.sort(); + rendezvous_addrs.dedup(); + let new_len = rendezvous_addrs.len(); + if new_len < prev_len { + tracing::warn!( + "`rendezvous_point` config has {} duplicate entries, they are being ignored.", + prev_len - new_len + ); + } + let monero_wallet = init_monero_wallet(&config, env_config).await?; let monero_address = monero_wallet.get_main_address(); tracing::info!(%monero_address, "Monero wallet address"); @@ -161,7 +174,7 @@ async fn main() -> Result<()> { resume_only, env_config, namespace, - config.network.rendezvous_point, + &rendezvous_addrs, )?; for listen in config.network.listen.clone() { diff --git a/swap/src/bitcoin/cancel.rs b/swap/src/bitcoin/cancel.rs index 354b0c00..35b6b197 100644 --- a/swap/src/bitcoin/cancel.rs +++ b/swap/src/bitcoin/cancel.rs @@ -210,14 +210,20 @@ impl TxCancel { }; // The order in which these are inserted doesn't matter - satisfier.insert(A, ::bitcoin::EcdsaSig { - sig: sig_a.into(), - hash_ty: EcdsaSighashType::All, - }); - satisfier.insert(B, ::bitcoin::EcdsaSig { - sig: sig_b.into(), - hash_ty: EcdsaSighashType::All, - }); + satisfier.insert( + A, + ::bitcoin::EcdsaSig { + sig: sig_a.into(), + hash_ty: EcdsaSighashType::All, + }, + ); + satisfier.insert( + B, + ::bitcoin::EcdsaSig { + sig: sig_b.into(), + hash_ty: EcdsaSighashType::All, + }, + ); satisfier }; diff --git a/swap/src/bitcoin/punish.rs b/swap/src/bitcoin/punish.rs index df7a1367..247c904f 100644 --- a/swap/src/bitcoin/punish.rs +++ b/swap/src/bitcoin/punish.rs @@ -65,14 +65,20 @@ impl TxPunish { let B = B.try_into()?; // The order in which these are inserted doesn't matter - satisfier.insert(A, ::bitcoin::EcdsaSig { - sig: sig_a.into(), - hash_ty: EcdsaSighashType::All, - }); - satisfier.insert(B, ::bitcoin::EcdsaSig { - sig: sig_b.into(), - hash_ty: EcdsaSighashType::All, - }); + satisfier.insert( + A, + ::bitcoin::EcdsaSig { + sig: sig_a.into(), + hash_ty: EcdsaSighashType::All, + }, + ); + satisfier.insert( + B, + ::bitcoin::EcdsaSig { + sig: sig_b.into(), + hash_ty: EcdsaSighashType::All, + }, + ); satisfier }; diff --git a/swap/src/bitcoin/redeem.rs b/swap/src/bitcoin/redeem.rs index d94f03d9..e91c25ee 100644 --- a/swap/src/bitcoin/redeem.rs +++ b/swap/src/bitcoin/redeem.rs @@ -87,14 +87,20 @@ impl TxRedeem { }; // The order in which these are inserted doesn't matter - satisfier.insert(A, ::bitcoin::EcdsaSig { - sig: sig_a.into(), - hash_ty: EcdsaSighashType::All, - }); - satisfier.insert(B, ::bitcoin::EcdsaSig { - sig: sig_b.into(), - hash_ty: EcdsaSighashType::All, - }); + satisfier.insert( + A, + ::bitcoin::EcdsaSig { + sig: sig_a.into(), + hash_ty: EcdsaSighashType::All, + }, + ); + satisfier.insert( + B, + ::bitcoin::EcdsaSig { + sig: sig_b.into(), + hash_ty: EcdsaSighashType::All, + }, + ); satisfier }; diff --git a/swap/src/bitcoin/refund.rs b/swap/src/bitcoin/refund.rs index 55aa6c25..a73dd0e3 100644 --- a/swap/src/bitcoin/refund.rs +++ b/swap/src/bitcoin/refund.rs @@ -70,14 +70,20 @@ impl TxRefund { }; // The order in which these are inserted doesn't matter - satisfier.insert(A, ::bitcoin::EcdsaSig { - sig: sig_a.into(), - hash_ty: EcdsaSighashType::All, - }); - satisfier.insert(B, ::bitcoin::EcdsaSig { - sig: sig_b.into(), - hash_ty: EcdsaSighashType::All, - }); + satisfier.insert( + A, + ::bitcoin::EcdsaSig { + sig: sig_a.into(), + hash_ty: EcdsaSighashType::All, + }, + ); + satisfier.insert( + B, + ::bitcoin::EcdsaSig { + sig: sig_b.into(), + hash_ty: EcdsaSighashType::All, + }, + ); satisfier }; diff --git a/swap/src/bitcoin/wallet.rs b/swap/src/bitcoin/wallet.rs index 7427b3e6..9a8500b6 100644 --- a/swap/src/bitcoin/wallet.rs +++ b/swap/src/bitcoin/wallet.rs @@ -738,12 +738,15 @@ impl Client { let client = bdk::electrum_client::Client::new(electrum_rpc_url.as_str()) .context("Failed to initialize Electrum RPC client")?; let blockchain = ElectrumBlockchain::from(client); + let last_sync = Instant::now() + .checked_sub(interval) + .expect("no underflow since block time is only 600 secs"); Ok(Self { electrum, blockchain, latest_block_height: BlockHeight::try_from(latest_block)?, - last_sync: Instant::now() - interval, + last_sync, sync_interval: interval, script_history: Default::default(), subscriptions: Default::default(), diff --git a/swap/src/cli.rs b/swap/src/cli.rs index c98634d2..f0faf146 100644 --- a/swap/src/cli.rs +++ b/swap/src/cli.rs @@ -15,6 +15,7 @@ pub use list_sellers::{list_sellers, Seller, Status as SellerStatus}; mod tests { use super::*; use crate::asb; + use crate::asb::rendezvous::RendezvousNode; use crate::cli::list_sellers::{Seller, Status}; use crate::network::quote; use crate::network::quote::BidQuote; @@ -33,10 +34,8 @@ mod tests { async fn list_sellers_should_report_all_registered_asbs_with_a_quote() { let namespace = XmrBtcNamespace::Mainnet; let (rendezvous_address, rendezvous_peer_id) = setup_rendezvous_point().await; - let expected_seller_1 = - setup_asb(rendezvous_peer_id, rendezvous_address.clone(), namespace).await; - let expected_seller_2 = - setup_asb(rendezvous_peer_id, rendezvous_address.clone(), namespace).await; + let expected_seller_1 = setup_asb(rendezvous_peer_id, &rendezvous_address, namespace).await; + let expected_seller_2 = setup_asb(rendezvous_peer_id, &rendezvous_address, namespace).await; let list_sellers = list_sellers( rendezvous_peer_id, @@ -72,7 +71,7 @@ mod tests { async fn setup_asb( rendezvous_peer_id: PeerId, - rendezvous_address: Multiaddr, + rendezvous_address: &Multiaddr, namespace: XmrBtcNamespace, ) -> Seller { let static_quote = BidQuote { @@ -81,18 +80,18 @@ mod tests { max_quantity: bitcoin::Amount::from_sat(9001), }; - let mut asb = new_swarm(|_, identity| StaticQuoteAsbBehaviour { - rendezvous: asb::rendezous::Behaviour::new( - identity, - rendezvous_peer_id, - rendezvous_address, - namespace, - None, - ), - ping: Default::default(), - quote: quote::asb(), - static_quote, - registered: false, + let mut asb = new_swarm(|_, identity| { + let rendezvous_node = + RendezvousNode::new(rendezvous_address, rendezvous_peer_id, namespace, None); + let rendezvous = asb::rendezvous::Behaviour::new(identity, vec![rendezvous_node]); + + StaticQuoteAsbBehaviour { + rendezvous, + ping: Default::default(), + quote: quote::asb(), + static_quote, + registered: false, + } }); let asb_address = asb.listen_on_tcp_localhost().await; @@ -121,7 +120,7 @@ mod tests { #[derive(libp2p::NetworkBehaviour)] #[behaviour(event_process = true)] struct StaticQuoteAsbBehaviour { - rendezvous: asb::rendezous::Behaviour, + rendezvous: asb::rendezvous::Behaviour, // Support `Ping` as a workaround until https://github.com/libp2p/rust-libp2p/issues/2109 is fixed. ping: libp2p::ping::Ping, quote: quote::Behaviour, diff --git a/swap/src/cli/list_sellers.rs b/swap/src/cli/list_sellers.rs index 95a52386..381c561f 100644 --- a/swap/src/cli/list_sellers.rs +++ b/swap/src/cli/list_sellers.rs @@ -350,23 +350,26 @@ mod tests { list.sort(); - assert_eq!(list, vec![ - Seller { - multiaddr: "/ip4/127.0.0.1/tcp/5678".parse().unwrap(), - status: Status::Online(BidQuote { - price: Default::default(), - min_quantity: Default::default(), - max_quantity: Default::default(), - }) - }, - Seller { - multiaddr: Multiaddr::empty(), - status: Status::Unreachable - }, - Seller { - multiaddr: "/ip4/127.0.0.1/tcp/1234".parse().unwrap(), - status: Status::Unreachable - }, - ]) + assert_eq!( + list, + vec![ + Seller { + multiaddr: "/ip4/127.0.0.1/tcp/5678".parse().unwrap(), + status: Status::Online(BidQuote { + price: Default::default(), + min_quantity: Default::default(), + max_quantity: Default::default(), + }) + }, + Seller { + multiaddr: Multiaddr::empty(), + status: Status::Unreachable + }, + Seller { + multiaddr: "/ip4/127.0.0.1/tcp/1234".parse().unwrap(), + status: Status::Unreachable + }, + ] + ) } } diff --git a/swap/src/network/swap_setup/bob.rs b/swap/src/network/swap_setup/bob.rs index 18972319..bee70c24 100644 --- a/swap/src/network/swap_setup/bob.rs +++ b/swap/src/network/swap_setup/bob.rs @@ -155,13 +155,16 @@ impl ProtocolsHandler for Handler { let env_config = self.env_config; let protocol = tokio::time::timeout(self.timeout, async move { - write_cbor_message(&mut substream, SpotPriceRequest { - btc: info.btc, - blockchain_network: BlockchainNetwork { - bitcoin: env_config.bitcoin_network, - monero: env_config.monero_network, + write_cbor_message( + &mut substream, + SpotPriceRequest { + btc: info.btc, + blockchain_network: BlockchainNetwork { + bitcoin: env_config.bitcoin_network, + monero: env_config.monero_network, + }, }, - }) + ) .await?; let xmr = Result::from(read_cbor_message::(&mut substream).await?)?; diff --git a/swap/src/network/swarm.rs b/swap/src/network/swarm.rs index 21bbfc4d..37bb0a5e 100644 --- a/swap/src/network/swarm.rs +++ b/swap/src/network/swarm.rs @@ -1,9 +1,9 @@ -use crate::asb::LatestRate; +use crate::asb::{LatestRate, RendezvousNode}; use crate::libp2p_ext::MultiAddrExt; use crate::network::rendezvous::XmrBtcNamespace; use crate::seed::Seed; use crate::{asb, bitcoin, cli, env, tor}; -use anyhow::{Context, Result}; +use anyhow::Result; use libp2p::swarm::{NetworkBehaviour, SwarmBuilder}; use libp2p::{identity, Multiaddr, Swarm}; use std::fmt::Debug; @@ -17,22 +17,23 @@ pub fn asb( resume_only: bool, env_config: env::Config, namespace: XmrBtcNamespace, - rendezvous_point: Option, + rendezvous_addrs: &[Multiaddr], ) -> Result>> where LR: LatestRate + Send + 'static + Debug + Clone, { let identity = seed.derive_libp2p_identity(); - let rendezvous_params = if let Some(address) = rendezvous_point { - let peer_id = address - .extract_peer_id() - .context("Rendezvous node address must contain peer ID")?; + let rendezvous_nodes = rendezvous_addrs + .iter() + .map(|addr| { + let peer_id = addr + .extract_peer_id() + .expect("Rendezvous node address must contain peer ID"); - Some((identity.clone(), peer_id, address, namespace)) - } else { - None - }; + RendezvousNode::new(addr, peer_id, namespace, None) + }) + .collect(); let behaviour = asb::Behaviour::new( min_buy, @@ -41,7 +42,7 @@ where resume_only, env_config, (identity.clone(), namespace), - rendezvous_params, + rendezvous_nodes, ); let transport = asb::transport::new(&identity)?; diff --git a/swap/src/network/test.rs b/swap/src/network/test.rs index da5bac77..a5c316b1 100644 --- a/swap/src/network/test.rs +++ b/swap/src/network/test.rs @@ -21,7 +21,7 @@ struct GlobalSpawnTokioExecutor; impl Executor for GlobalSpawnTokioExecutor { fn exec(&self, future: Pin + Send>>) { - let _ = tokio::spawn(future); + tokio::spawn(future); } } diff --git a/swap/src/protocol/alice/state.rs b/swap/src/protocol/alice/state.rs index 9dcf3f46..b34e0326 100644 --- a/swap/src/protocol/alice/state.rs +++ b/swap/src/protocol/alice/state.rs @@ -184,29 +184,32 @@ impl State0 { let v = self.v_a + msg.v_b; - Ok((msg.swap_id, State1 { - a: self.a, - B: msg.B, - s_a: self.s_a, - S_a_monero: self.S_a_monero, - S_a_bitcoin: self.S_a_bitcoin, - S_b_monero: msg.S_b_monero, - S_b_bitcoin: msg.S_b_bitcoin, - v, - v_a: self.v_a, - dleq_proof_s_a: self.dleq_proof_s_a, - btc: self.btc, - xmr: self.xmr, - cancel_timelock: self.cancel_timelock, - punish_timelock: self.punish_timelock, - refund_address: msg.refund_address, - redeem_address: self.redeem_address, - punish_address: self.punish_address, - tx_redeem_fee: self.tx_redeem_fee, - tx_punish_fee: self.tx_punish_fee, - tx_refund_fee: msg.tx_refund_fee, - tx_cancel_fee: msg.tx_cancel_fee, - })) + Ok(( + msg.swap_id, + State1 { + a: self.a, + B: msg.B, + s_a: self.s_a, + S_a_monero: self.S_a_monero, + S_a_bitcoin: self.S_a_bitcoin, + S_b_monero: msg.S_b_monero, + S_b_bitcoin: msg.S_b_bitcoin, + v, + v_a: self.v_a, + dleq_proof_s_a: self.dleq_proof_s_a, + btc: self.btc, + xmr: self.xmr, + cancel_timelock: self.cancel_timelock, + punish_timelock: self.punish_timelock, + refund_address: msg.refund_address, + redeem_address: self.redeem_address, + punish_address: self.punish_address, + tx_redeem_fee: self.tx_redeem_fee, + tx_punish_fee: self.tx_punish_fee, + tx_refund_fee: msg.tx_refund_fee, + tx_cancel_fee: msg.tx_cancel_fee, + }, + )) } } diff --git a/swap/src/seed.rs b/swap/src/seed.rs index 03a9170d..1bbcfdcb 100644 --- a/swap/src/seed.rs +++ b/swap/src/seed.rs @@ -187,6 +187,9 @@ mod tests { #[test] fn seed_from_pem_works() { + use base64::engine::general_purpose; + use base64::Engine; + let payload: &str = "syl9wSYaruvgxg9P5Q1qkZaq5YkM6GvXkxe+VYrL/XM="; // 32 bytes base64 encoded. @@ -195,7 +198,7 @@ syl9wSYaruvgxg9P5Q1qkZaq5YkM6GvXkxe+VYrL/XM= -----END SEED----- "; - let want = base64::decode(payload).unwrap(); + let want = general_purpose::STANDARD.decode(payload).unwrap(); let pem = pem::parse(pem_string).unwrap(); let got = Seed::from_pem(pem).unwrap(); diff --git a/swap/tests/ensure_same_swap_id.rs b/swap/tests/ensure_same_swap_id.rs index 48758ecd..28f09823 100644 --- a/swap/tests/ensure_same_swap_id.rs +++ b/swap/tests/ensure_same_swap_id.rs @@ -8,7 +8,7 @@ async fn ensure_same_swap_id_for_alice_and_bob() { harness::setup_test(SlowCancelConfig, |mut ctx| async move { let (bob_swap, _) = ctx.bob_swap().await; let bob_swap_id = bob_swap.id; - let _ = tokio::spawn(bob::run(bob_swap)); + tokio::spawn(bob::run(bob_swap)); // once Bob's swap is spawned we can retrieve Alice's swap and assert on the // swap ID diff --git a/swap/tests/harness/mod.rs b/swap/tests/harness/mod.rs index 74afcc83..4f3f5fee 100644 --- a/swap/tests/harness/mod.rs +++ b/swap/tests/harness/mod.rs @@ -158,13 +158,16 @@ async fn init_containers(cli: &Cli) -> (Monero, Containers<'_>) { .await .unwrap(); - (monero, Containers { - bitcoind_url, - bitcoind, - monerod_container, - monero_wallet_rpc_containers, - electrs, - }) + ( + monero, + Containers { + bitcoind_url, + bitcoind, + monerod_container, + monero_wallet_rpc_containers, + electrs, + }, + ) } async fn init_bitcoind_container( @@ -245,7 +248,7 @@ async fn start_alice( resume_only, env_config, XmrBtcNamespace::Testnet, - None, + &[], ) .unwrap(); swarm.listen_on(listen_address).unwrap(); @@ -925,7 +928,7 @@ async fn init_bitcoind(node_url: Url, spendable_quantity: u32) -> Result bitcoind_client .generatetoaddress(101 + spendable_quantity, reward_address.clone()) .await?; - let _ = tokio::spawn(mine(bitcoind_client.clone(), reward_address)); + tokio::spawn(mine(bitcoind_client.clone(), reward_address)); Ok(bitcoind_client) }