diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8abde22a..81330fd6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,9 +4,9 @@ on: pull_request: # Need to run on pull-requests, otherwise PRs from forks don't run push: branches: - - 'staging' # Bors uses this branch - - 'trying' # Bors uses this branch - - 'master' # Always build head of master for the badge in the README + - "staging" # Bors uses this branch + - "trying" # Bors uses this branch + - "master" # Always build head of master for the badge in the README jobs: static_analysis: @@ -40,7 +40,6 @@ jobs: os: windows-latest runs-on: ${{ matrix.os }} steps: - - name: Checkout sources uses: actions/checkout@v3.0.2 @@ -71,7 +70,7 @@ jobs: test: strategy: matrix: - os: [ ubuntu-latest, macos-latest ] + os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout sources @@ -92,7 +91,8 @@ jobs: docker_tests: strategy: matrix: - test_name: [ + test_name: + [ happy_path, happy_path_restart_bob_after_xmr_locked, happy_path_restart_bob_before_xmr_locked, @@ -105,11 +105,10 @@ jobs: alice_refunds_after_restart_bob_refunded, ensure_same_swap_id, concurrent_bobs_before_xmr_lock_proof_sent, - alice_manually_redeems_after_enc_sig_learned - ] + alice_manually_redeems_after_enc_sig_learned, + ] runs-on: ubuntu-latest steps: - - name: Checkout sources uses: actions/checkout@v3.0.2 diff --git a/.github/workflows/draft-new-release.yml b/.github/workflows/draft-new-release.yml index d27791be..3d012d33 100644 --- a/.github/workflows/draft-new-release.yml +++ b/.github/workflows/draft-new-release.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: version: - description: 'The new version in X.Y.Z format.' + description: "The new version in X.Y.Z format." required: true jobs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 41243c57..24cd669d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Adjust quote based on Bitcoin balance. If the max_buy_btc in the ASB config is higher than the available balance to trade, it will return the max available balance discounting the Monero locking fees. In the case the balance is lower than the min_buy_btc config it will return 0 to the CLI. If the ASB returns a quote of 0 the CLI will not allow you continue with a trade. - Reduce required confirmations for Bitcoin transactions from 2 to 1 +- Update from monero v17.2.0 to monero v17.3.0 - Both the ASB and CLI now support the [Identify](https://github.com/libp2p/specs/blob/master/identify/README.md) protocol. This makes its version and network (testnet/mainnet) avaliable to others - Display minimum BTC deposit required to cover the minimum quantity plus fee in the Swap CLI diff --git a/Cargo.lock b/Cargo.lock index 850d3a7f..7ee0d4d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,11 +49,20 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" dependencies = [ - "getrandom 0.2.2", + "getrandom 0.2.6", "once_cell", "version_check", ] +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + [[package]] name = "ansi_term" version = "0.11.0" @@ -187,7 +196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.2", + "getrandom 0.2.6", "instant", "pin-project-lite 0.2.9", "rand 0.8.3", @@ -376,12 +385,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "blake2" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a5720225ef5daecf08657f23791354e1685a8c91a4c60c7f3d3b2892f978f4" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" dependencies = [ "crypto-mac 0.8.0", - "digest", + "digest 0.9.0", "opaque-debug", ] @@ -395,6 +404,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array", +] + [[package]] name = "block-padding" version = "0.2.1" @@ -485,21 +503,21 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chacha20" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee7ad89dc1128635074c268ee661f90c3f7e83d9fd12910608c36b47d6c3412" +checksum = "f08493fa7707effc63254c66c6ea908675912493cd67952eda23c09fae2610b1" dependencies = [ "cfg-if 1.0.0", "cipher", - "cpufeatures 0.1.4", + "cpufeatures 0.2.1", "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580317203210c517b6d44794abfbe600698276db18127e37ad3e69bf5e848e5" +checksum = "b6547abe025f4027edacd9edaa357aded014eecec42a5070d9b885c3c334aba2" dependencies = [ "aead", "chacha20", @@ -763,6 +781,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto-common" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "crypto-mac" version = "0.8.0" @@ -809,7 +837,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "639891fde0dbea823fc3d798a0fdf9d2f9440a42d64a78ab3488b0ca025117b3" dependencies = [ "byteorder", - "digest", + "digest 0.9.0", "rand_core 0.5.1", "subtle", "zeroize", @@ -822,7 +850,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "574d8b2cd0bae5434fd50d53280f8299d95557a978686555880aaf5b8f4f81e9" dependencies = [ "byteorder", - "digest", + "digest 0.9.0", "rand_core 0.6.2", "serde", "subtle-ng", @@ -914,6 +942,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "digest" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer 0.10.2", + "crypto-common", +] + [[package]] name = "directories-next" version = "2.0.0" @@ -943,9 +981,9 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "dtoa" -version = "0.4.8" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +checksum = "5caaa75cbd2b960ff1e5392d2cfb1f44717fffe12fc1f32b7b5d1267f99732a6" [[package]] name = "ecdsa_fun" @@ -978,7 +1016,7 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2", + "sha2 0.9.8", "zeroize", ] @@ -1089,9 +1127,9 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.2.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" [[package]] name = "flate2" @@ -1211,13 +1249,13 @@ dependencies = [ [[package]] name = "futures-rustls" -version = "0.21.1" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b" +checksum = "e01fe9932a224b72b45336d96040aa86386d674a31d0af27d800ea7bc8ca97fe" dependencies = [ "futures-io", - "rustls 0.19.0", - "webpki 0.21.4", + "rustls 0.20.2", + "webpki 0.22.0", ] [[package]] @@ -1297,9 +1335,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.2" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1427,7 +1465,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ "crypto-mac 0.8.0", - "digest", + "digest 0.9.0", ] [[package]] @@ -1437,7 +1475,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" dependencies = [ "crypto-mac 0.10.0", - "digest", + "digest 0.9.0", ] [[package]] @@ -1447,18 +1485,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ "crypto-mac 0.11.1", - "digest", -] - -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest", - "generic-array", - "hmac 0.8.1", + "digest 0.9.0", ] [[package]] @@ -1561,25 +1588,14 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.6.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28538916eb3f3976311f5dfbe67b5362d0add1293d0a9cad17debf86f8e3aa48" +checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" dependencies = [ - "if-addrs-sys", "libc", "winapi 0.3.9", ] -[[package]] -name = "if-addrs-sys" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de74b9dd780476e837e5eb5ab7c88b49ed304126e412030a0adba99c8efe79ea" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "image" version = "0.23.14" @@ -1606,9 +1622,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if 1.0.0", ] @@ -1755,9 +1771,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.119" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" +checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" [[package]] name = "libgit2-sys" @@ -1773,12 +1789,16 @@ dependencies = [ [[package]] name = "libp2p" -version = "0.40.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f592f1b06f12a5686a5de7be9f289a161c96d5f89f12b04b7d14cf3d61d7381" dependencies = [ "atomic", "bytes", "futures", + "futures-timer", + "getrandom 0.2.6", + "instant", "lazy_static", "libp2p-core", "libp2p-dns", @@ -1797,14 +1817,15 @@ dependencies = [ "multiaddr", "parking_lot 0.11.2", "pin-project 1.0.5", + "rand 0.7.3", "smallvec", - "wasm-timer", ] [[package]] name = "libp2p-core" -version = "0.30.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c4178afd65bf7c56744b4e0a6cfa6e9b694fe666efba596e03a46f79454d8d" dependencies = [ "asn1_der", "bs58", @@ -1813,8 +1834,8 @@ dependencies = [ "fnv", "futures", "futures-timer", + "instant", "lazy_static", - "libsecp256k1", "log", "multiaddr", "multihash", @@ -1823,10 +1844,10 @@ dependencies = [ "pin-project 1.0.5", "prost", "prost-build", - "rand 0.7.3", + "rand 0.8.3", "ring", "rw-stream-sink", - "sha2", + "sha2 0.10.2", "smallvec", "thiserror", "unsigned-varint", @@ -1836,8 +1857,9 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.30.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39d4a2e7efe62c738833b6be6c0f158cf7ffccba462320f4b3bebe43e1050e7b" dependencies = [ "futures", "libp2p-core", @@ -1848,24 +1870,26 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.31.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae5d84b4e57cb66abb9dd28ea36f69620816e004a7479c0ad76f45002820f99b" dependencies = [ "futures", + "futures-timer", "libp2p-core", "libp2p-swarm", "log", - "lru 0.6.6", + "lru", "prost", "prost-build", "smallvec", - "wasm-timer", ] [[package]] name = "libp2p-metrics" -version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0791098ddec13b0c2f9ed37a29175f7c712ce8804ebaba7cbd8bddbc83120190" dependencies = [ "libp2p-core", "libp2p-identify", @@ -1876,8 +1900,9 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.30.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49d470ee73a74340e429fa278469ed274a648738e3fb8de2e8d113482441732f" dependencies = [ "asynchronous-codec", "bytes", @@ -1893,8 +1918,9 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.33.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3676dc2df10a7f4f6a80fbeaf2ce4168a0ca6567273e3105b21fa4c877be9017" dependencies = [ "bytes", "curve25519-dalek", @@ -1905,7 +1931,7 @@ dependencies = [ "prost", "prost-build", "rand 0.8.3", - "sha2", + "sha2 0.10.2", "snow", "static_assertions", "x25519-dalek", @@ -1914,76 +1940,83 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.31.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d384b30135f122a59bf0d186647ad307da0878a9563232cb382d9dbded6a393e" dependencies = [ "futures", + "futures-timer", + "instant", "libp2p-core", "libp2p-swarm", "log", "rand 0.7.3", "void", - "wasm-timer", ] [[package]] name = "libp2p-rendezvous" -version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec166a822f4167929c8e1673c05106f7c86a42b8e9e917b569e1d86f06b9d8b5" dependencies = [ "asynchronous-codec", "bimap", "futures", + "futures-timer", + "instant", "libp2p-core", "libp2p-swarm", "log", "prost", "prost-build", "rand 0.8.3", - "sha2", + "sha2 0.10.2", "thiserror", "unsigned-varint", "void", - "wasm-timer", ] [[package]] name = "libp2p-request-response" -version = "0.13.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36194499f5b03d66d56badbed430d93bf1bfd9cec80311e03280de130fbe3d5e" dependencies = [ "async-trait", "bytes", "futures", + "instant", "libp2p-core", "libp2p-swarm", "log", - "lru 0.7.0", "rand 0.7.3", "smallvec", "unsigned-varint", - "wasm-timer", ] [[package]] name = "libp2p-swarm" -version = "0.31.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8ae0811c7a05b6edc6684eb5cc69b055cbb715ad780e6b97872d90308503c1" dependencies = [ "either", "futures", + "futures-timer", + "instant", "libp2p-core", "log", "rand 0.7.3", "smallvec", "void", - "wasm-timer", ] [[package]] name = "libp2p-swarm-derive" -version = "0.25.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b4d0acd47739fe0b570728d8d11bbb535050d84c0cf05d6477a4891fceae10" dependencies = [ "quote", "syn", @@ -1991,8 +2024,9 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.30.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52042e8796c5b58d0415bceb1bcb1bcca28b222339978e52b1a0305800bb5199" dependencies = [ "futures", "futures-timer", @@ -2007,8 +2041,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.31.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d788da0ab952632d6ead2486baf38a98db92907d4bc5d0f324af0d0fab803d" dependencies = [ "either", "futures", @@ -2019,13 +2054,14 @@ dependencies = [ "rw-stream-sink", "soketto", "url", - "webpki-roots 0.21.0", + "webpki-roots 0.22.2", ] [[package]] name = "libp2p-yamux" -version = "0.34.0" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053d13ce0670d29f9c5a974cf371e6cc4d2d864da1c72bf6870ac5d5e45e2036" dependencies = [ "futures", "libp2p-core", @@ -2034,54 +2070,6 @@ dependencies = [ "yamux", ] -[[package]] -name = "libsecp256k1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" -dependencies = [ - "arrayref", - "base64 0.12.3", - "digest", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.7.3", - "serde", - "sha2", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" -dependencies = [ - "crunchy", - "digest", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libsqlite3-sys" version = "0.22.2" @@ -2131,18 +2119,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ea2d928b485416e8908cff2d97d621db22b27f7b3b6729e438bcf42c671ba91" -dependencies = [ - "hashbrown", -] - -[[package]] -name = "lru" -version = "0.7.0" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c748cfe47cb8da225c37595b3108bea1c198c84aaae8ea0ba76d01dda9fc803" +checksum = "32613e41de4c47ab04970c348ca7ae7382cf116625755af070b008a15516a889" dependencies = [ "hashbrown", ] @@ -2188,9 +2167,9 @@ checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memoffset" @@ -2354,10 +2333,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "752a61cd890ff691b4411423d23816d5866dd5621e4d1c5687a53b94b5a979d8" dependencies = [ - "digest", + "digest 0.9.0", "generic-array", "multihash-derive", - "sha2", + "sha2 0.9.8", "unsigned-varint", ] @@ -2383,8 +2362,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.10.4" -source = "git+https://github.com/libp2p/rust-libp2p.git#6d3ab8a3debe8d69dcd004173999732f12d0da96" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "363a84be6453a70e63513660f4894ef815daf88e3356bffcda9ca27d810ce83b" dependencies = [ "bytes", "futures", @@ -2553,12 +2533,12 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "open-metrics-client" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7337d80c23c2d8b1349563981bc4fb531220733743ba8115454a67b181173f0d" +checksum = "f85842b073145726190373213c63f852020fb884c841a3a1f390637267a2fb8c" dependencies = [ "dtoa", - "itoa 0.4.7", + "itoa 1.0.1", "open-metrics-client-derive-text-encode", "owning_ref", ] @@ -2663,9 +2643,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" dependencies = [ "fixedbitset", "indexmap", @@ -2844,9 +2824,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" dependencies = [ "bytes", "prost-derive", @@ -2854,27 +2834,29 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355f634b43cdd80724ee7848f95770e7e70eefa6dcf14fea676216573b8fd603" +checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" dependencies = [ "bytes", "heck 0.3.2", "itertools", + "lazy_static", "log", "multimap", "petgraph", "prost", "prost-types", + "regex", "tempfile", "which", ] [[package]] name = "prost-derive" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", "itertools", @@ -2885,9 +2867,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "603bbd6394701d13f3f25aada59c7de9d35a6a5887cfc156181234a44002771b" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" dependencies = [ "bytes", "prost", @@ -3052,7 +3034,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" dependencies = [ - "getrandom 0.2.2", + "getrandom 0.2.6", ] [[package]] @@ -3168,16 +3150,18 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ - "getrandom 0.2.2", + "getrandom 0.2.6", "redox_syscall", ] [[package]] name = "regex" -version = "1.4.5" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] @@ -3193,9 +3177,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.23" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remove_dir_all" @@ -3469,7 +3453,7 @@ name = "secp256kfun" version = "0.6.2-alpha.0" source = "git+https://github.com/LLFourn/secp256kfun#84134daf34845434d7f38cdae7ffc31730a3b1e9" dependencies = [ - "digest", + "digest 0.9.0", "rand_core 0.6.2", "secp256k1", "secp256kfun_parity_backend", @@ -3619,10 +3603,10 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfebf75d25bd900fd1e7d11501efab59bc846dbc76196839663e6637bba9f25f" dependencies = [ - "block-buffer", + "block-buffer 0.9.0", "cfg-if 1.0.0", "cpuid-bool", - "digest", + "digest 0.9.0", "opaque-debug", ] @@ -3632,21 +3616,32 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ - "block-buffer", + "block-buffer 0.9.0", "cfg-if 1.0.0", "cpufeatures 0.2.1", - "digest", + "digest 0.9.0", "opaque-debug", ] +[[package]] +name = "sha2" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures 0.2.1", + "digest 0.10.3", +] + [[package]] name = "sha3" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" dependencies = [ - "block-buffer", - "digest", + "block-buffer 0.9.0", + "digest 0.9.0", "keccak", "opaque-debug", ] @@ -3666,7 +3661,7 @@ version = "0.3.2-alpha.0" source = "git+https://github.com/LLFourn/secp256kfun#84134daf34845434d7f38cdae7ffc31730a3b1e9" dependencies = [ "curve25519-dalek-ng", - "digest", + "digest 0.9.0", "generic-array", "rand_core 0.6.2", "secp256kfun", @@ -3750,7 +3745,7 @@ dependencies = [ "rand_core 0.6.2", "ring", "rustc_version", - "sha2", + "sha2 0.9.8", "subtle", "x25519-dalek", ] @@ -3873,7 +3868,7 @@ dependencies = [ "percent-encoding", "rustls 0.19.0", "serde", - "sha2", + "sha2 0.9.8", "smallvec", "sqlformat", "sqlx-rt", @@ -3901,7 +3896,7 @@ dependencies = [ "quote", "serde", "serde_json", - "sha2", + "sha2 0.9.8", "sqlx-core", "sqlx-rt", "syn", @@ -4076,7 +4071,7 @@ dependencies = [ "serde_cbor", "serde_json", "serde_with", - "sha2", + "sha2 0.9.8", "sigma_fun", "spectral", "sqlx", @@ -4164,7 +4159,7 @@ dependencies = [ "rand 0.7.3", "serde", "serde_json", - "sha2", + "sha2 0.9.8", ] [[package]] @@ -4179,7 +4174,7 @@ dependencies = [ "rand 0.8.3", "serde", "serde_json", - "sha2", + "sha2 0.9.8", ] [[package]] @@ -4423,7 +4418,7 @@ dependencies = [ "hex", "hmac 0.11.0", "rand 0.7.3", - "sha2", + "sha2 0.9.8", "sha3", "tokio", ] @@ -4625,9 +4620,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" @@ -4707,9 +4702,9 @@ dependencies = [ [[package]] name = "unsigned-varint" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f8d425fafb8cd76bc3f22aace4af471d3156301d7508f2107e98fbeae10bc7f" +checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" dependencies = [ "asynchronous-codec", "bytes", @@ -4748,7 +4743,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" dependencies = [ - "getrandom 0.2.2", + "getrandom 0.2.6", "serde", ] @@ -4895,21 +4890,6 @@ version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1" -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-sys" version = "0.3.48" @@ -5120,14 +5100,14 @@ dependencies = [ [[package]] name = "yamux" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d9028f208dd5e63c614be69f115c1b53cacc1111437d4c765185856666c107" +checksum = "0c0608f53c1dc0bad505d03a34bbd49fbf2ad7b51eb036123e896365532745a1" dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "rand 0.8.3", "static_assertions", ] diff --git a/dprint.json b/dprint.json index 3f1eab87..18c300b2 100644 --- a/dprint.json +++ b/dprint.json @@ -2,13 +2,12 @@ "$schema": "https://dprint.dev/schemas/v0.json", "projectType": "openSource", "incremental": true, - "markdown": { - }, + "markdown": {}, "rustfmt": { - "edition": 2018, + "edition": 2021, "condense_wildcard_suffixes": true, "format_macro_matchers": true, - "imports_granularity" : "Module", + "imports_granularity": "Module", "use_field_init_shorthand": true, "format_code_in_doc_comments": true, "normalize_comments": true, @@ -16,7 +15,7 @@ "overflow_delimited_expr": true }, "includes": ["**/*.{md}", "**/*.{toml}", "**/*.{rs}"], - "excludes": [ "target/" ], + "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", diff --git a/swap/Cargo.toml b/swap/Cargo.toml index bb66fcbf..94a7a0fe 100644 --- a/swap/Cargo.toml +++ b/swap/Cargo.toml @@ -31,7 +31,7 @@ ed25519-dalek = "1" futures = { version = "0.3", default-features = false } hex = "0.4" itertools = "0.10" -libp2p = { git = "https://github.com/libp2p/rust-libp2p.git", default-features = false, features = [ "tcp-tokio", "yamux", "mplex", "dns-tokio", "noise", "request-response", "websocket", "ping", "rendezvous", "identify" ] } +libp2p = { version = "0.42.2", default-features = false, features = [ "tcp-tokio", "yamux", "mplex", "dns-tokio", "noise", "request-response", "websocket", "ping", "rendezvous", "identify" ] } monero = { version = "0.12", features = [ "serde_support" ] } monero-rpc = { path = "../monero-rpc" } pem = "1.1" diff --git a/swap/src/asb/network.rs b/swap/src/asb/network.rs index 70c7f861..41b62c31 100644 --- a/swap/src/asb/network.rs +++ b/swap/src/asb/network.rs @@ -16,9 +16,10 @@ use libp2p::dns::TokioDnsConfig; use libp2p::identify::{Identify, IdentifyConfig, IdentifyEvent}; use libp2p::ping::{Ping, PingConfig, PingEvent}; use libp2p::request_response::{RequestId, ResponseChannel}; +use libp2p::swarm::dial_opts::PeerCondition; use libp2p::swarm::{ - DialPeerCondition, IntoProtocolsHandler, NetworkBehaviour, NetworkBehaviourAction, - PollParameters, ProtocolsHandler, + IntoProtocolsHandler, NetworkBehaviour, NetworkBehaviourAction, PollParameters, + ProtocolsHandler, }; use libp2p::tcp::TokioTcpConfig; use libp2p::websocket::WsConfig; @@ -107,7 +108,7 @@ pub mod behaviour { where LR: LatestRate + Send + 'static, { - pub rendezvous: libp2p::swarm::toggle::Toggle, + pub rendezvous: libp2p::swarm::behaviour::toggle::Toggle, pub quote: quote::Behaviour, pub swap_setup: alice::Behaviour, pub transfer_proof: transfer_proof::Behaviour, @@ -139,7 +140,7 @@ pub mod behaviour { .with_agent_version(agentVersion); Self { - rendezvous: libp2p::swarm::toggle::Toggle::from(rendezvous_params.map( + rendezvous: libp2p::swarm::behaviour::toggle::Toggle::from(rendezvous_params.map( |(identity, rendezvous_peer_id, rendezvous_address, namespace)| { rendezous::Behaviour::new( identity, @@ -187,6 +188,7 @@ pub mod behaviour { pub mod rendezous { use super::*; + use libp2p::swarm::dial_opts::DialOpts; use libp2p::swarm::DialError; use std::pin::Pin; @@ -292,12 +294,14 @@ pub mod rendezous { fn inject_dial_failure( &mut self, - peer_id: &PeerId, + peer_id: Option, _handler: Self::ProtocolsHandler, - _error: DialError, + _error: &DialError, ) { - if peer_id == &self.rendezvous_peer_id { - self.connection_status = ConnectionStatus::Disconnected; + if let Some(id) = peer_id { + if id == self.rendezvous_peer_id { + self.connection_status = ConnectionStatus::Disconnected; + } } } @@ -312,9 +316,11 @@ pub mod rendezous { ConnectionStatus::Disconnected => { self.connection_status = ConnectionStatus::Dialling; - return Poll::Ready(NetworkBehaviourAction::DialPeer { - peer_id: self.rendezvous_peer_id, - condition: DialPeerCondition::Disconnected, + 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)), }); } @@ -335,9 +341,10 @@ pub mod rendezous { self.registration_status = RegistrationStatus::RegisterOnNextConnection; - return Poll::Ready(NetworkBehaviourAction::DialPeer { - peer_id: self.rendezvous_peer_id, - condition: DialPeerCondition::Disconnected, + 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)), }); } diff --git a/swap/src/cli/event_loop.rs b/swap/src/cli/event_loop.rs index 3d376449..2a9c16d3 100644 --- a/swap/src/cli/event_loop.rs +++ b/swap/src/cli/event_loop.rs @@ -9,6 +9,7 @@ use anyhow::{Context, Result}; use futures::future::{BoxFuture, OptionFuture}; use futures::{FutureExt, StreamExt}; use libp2p::request_response::{RequestId, ResponseChannel}; +use libp2p::swarm::dial_opts::DialOpts; use libp2p::swarm::SwarmEvent; use libp2p::{PeerId, Swarm}; use std::collections::HashMap; @@ -81,7 +82,7 @@ impl EventLoop { } pub async fn run(mut self) { - match self.swarm.dial(&self.alice_peer_id) { + match self.swarm.dial(DialOpts::from(self.alice_peer_id)) { Ok(()) => {} Err(e) => { tracing::error!("Failed to initiate dial to Alice: {}", e); @@ -167,12 +168,13 @@ impl EventLoop { tracing::info!("Successfully closed connection to Alice"); return; } - SwarmEvent::UnreachableAddr { peer_id, address, attempts_remaining, error } if peer_id == self.alice_peer_id && attempts_remaining == 0 => { - tracing::warn!(%address, "Failed to dial Alice: {}", error); + SwarmEvent::OutgoingConnectionError { peer_id, error } if matches!(peer_id, Some(alice_peer_id) if alice_peer_id == self.alice_peer_id) => { + tracing::warn!( "Failed to dial Alice: {}", error); if let Some(duration) = self.swarm.behaviour_mut().redial.until_next_redial() { tracing::info!("Next redial attempt in {}s", duration.as_secs()); } + } _ => {} } diff --git a/swap/src/cli/list_sellers.rs b/swap/src/cli/list_sellers.rs index 90816e2f..95a52386 100644 --- a/swap/src/cli/list_sellers.rs +++ b/swap/src/cli/list_sellers.rs @@ -6,6 +6,7 @@ use futures::StreamExt; use libp2p::multiaddr::Protocol; use libp2p::ping::{Ping, PingConfig, PingEvent}; use libp2p::request_response::{RequestResponseEvent, RequestResponseMessage}; +use libp2p::swarm::dial_opts::DialOpts; use libp2p::swarm::SwarmEvent; use libp2p::{identity, rendezvous, Multiaddr, PeerId, Swarm}; use serde::Serialize; @@ -42,8 +43,9 @@ pub async fn list_sellers( .behaviour_mut() .quote .add_address(&rendezvous_node_peer_id, rendezvous_node_addr.clone()); + swarm - .dial(&rendezvous_node_peer_id) + .dial(DialOpts::from(rendezvous_node_peer_id)) .context("Failed to dial rendezvous node")?; let event_loop = EventLoop::new( @@ -147,7 +149,7 @@ impl EventLoop { swarm_event = self.swarm.select_next_some() => { match swarm_event { SwarmEvent::ConnectionEstablished { peer_id, endpoint, .. } => { - if peer_id == self.rendezvous_peer_id{ + if peer_id == self.rendezvous_peer_id { tracing::info!( "Connected to rendezvous point, discovering nodes in '{}' namespace ...", self.namespace @@ -161,35 +163,41 @@ impl EventLoop { ); } else { let address = endpoint.get_remote_address(); + tracing::debug!(%peer_id, %address, "Connection established to peer"); self.reachable_asb_address.insert(peer_id, address.clone()); } } - SwarmEvent::UnreachableAddr { peer_id, error, address, .. } => { - if address == self.rendezvous_addr { - tracing::error!( - "Failed to connect to rendezvous point at {}: {}", - address, - error - ); - - // if the rendezvous node is unreachable we just stop - return Vec::new(); - } else { - tracing::debug!( - "Failed to connect to peer at {}: {}", - address, - error - ); - self.unreachable_asb_address.insert(peer_id, address.clone()); - - match self.asb_quote_status.entry(peer_id) { - Entry::Occupied(mut entry) => { - entry.insert(QuoteStatus::Received(Status::Unreachable)); - }, - _ => { - tracing::debug!(%peer_id, %error, "Connection error with unexpected peer") + SwarmEvent::OutgoingConnectionError { peer_id, error } => { + if let Some(peer_id) = peer_id { + if peer_id == self.rendezvous_peer_id { + tracing::error!( + %peer_id, + %self.rendezvous_addr, + "Failed to connect to rendezvous point: {}", + error + ); + + // if the rendezvous node is unreachable we just stop + return Vec::new(); + } else { + tracing::error!( + %peer_id, + "Failed to connect to peer: {}", + error + ); + self.unreachable_asb_address.insert(peer_id, Multiaddr::empty()); + + match self.asb_quote_status.entry(peer_id) { + Entry::Occupied(mut entry) => { + entry.insert(QuoteStatus::Received(Status::Unreachable)); + }, + _ => { + tracing::debug!(%peer_id, %error, "Connection error with unexpected peer"); + } } } + } else { + tracing::debug!("Failed to connect (no peer id): {}", error); } } SwarmEvent::Behaviour(OutEvent::Rendezvous( diff --git a/swap/src/network/redial.rs b/swap/src/network/redial.rs index f8e9a251..e65ffc1f 100644 --- a/swap/src/network/redial.rs +++ b/swap/src/network/redial.rs @@ -4,8 +4,9 @@ use backoff::ExponentialBackoff; use futures::future::FutureExt; use libp2p::core::connection::ConnectionId; use libp2p::core::Multiaddr; +use libp2p::swarm::dial_opts::{DialOpts, PeerCondition}; use libp2p::swarm::protocols_handler::DummyProtocolsHandler; -use libp2p::swarm::{DialPeerCondition, NetworkBehaviour, NetworkBehaviourAction, PollParameters}; +use libp2p::swarm::{NetworkBehaviour, NetworkBehaviourAction, PollParameters}; use libp2p::PeerId; use std::pin::Pin; use std::task::{Context, Poll}; @@ -112,9 +113,10 @@ impl NetworkBehaviour for Behaviour { self.sleep = Some(Box::pin(tokio::time::sleep(next_dial_in))); - Poll::Ready(NetworkBehaviourAction::DialPeer { - peer_id: self.peer, - condition: DialPeerCondition::Disconnected, + Poll::Ready(NetworkBehaviourAction::Dial { + opts: DialOpts::peer_id(self.peer) + .condition(PeerCondition::Disconnected) + .build(), handler: Self::ProtocolsHandler::default(), }) } diff --git a/swap/src/network/test.rs b/swap/src/network/test.rs index 03602a81..da5bac77 100644 --- a/swap/src/network/test.rs +++ b/swap/src/network/test.rs @@ -129,8 +129,9 @@ where ::OutEvent: Debug, { let addr_to_dial = other.external_addresses().next().unwrap().addr.clone(); + let local_peer_id = *other.local_peer_id(); - self.dial_addr(addr_to_dial.clone()).unwrap(); + self.dial(addr_to_dial).unwrap(); let mut dialer_done = false; let mut listener_done = false; @@ -144,8 +145,8 @@ where SwarmEvent::ConnectionEstablished { .. } => { dialer_done = true; } - SwarmEvent::UnknownPeerUnreachableAddr { address, error } if address == addr_to_dial => { - panic!("Failed to dial address {}: {}", addr_to_dial, error) + SwarmEvent::OutgoingConnectionError { peer_id, error } if matches!(peer_id, Some(alice_peer_id) if alice_peer_id == local_peer_id) => { + panic!("Failed to dial address {}: {}", peer_id.unwrap(), error) } other => { tracing::debug!("Ignoring {:?}", other); diff --git a/swap/src/network/tor_transport.rs b/swap/src/network/tor_transport.rs index 2bee690a..4f441e17 100644 --- a/swap/src/network/tor_transport.rs +++ b/swap/src/network/tor_transport.rs @@ -60,6 +60,28 @@ impl Transport for TorDialOnlyTransport { fn address_translation(&self, _: &Multiaddr, _: &Multiaddr) -> Option { None } + fn dial_as_listener(self, addr: Multiaddr) -> Result> { + let address = TorCompatibleAddress::from_multiaddr(Cow::Borrowed(&addr))?; + + if address.is_certainly_not_reachable_via_tor_daemon() { + return Err(TransportError::MultiaddrNotSupported(addr)); + } + + let dial_future = async move { + tracing::debug!(address = %addr, "Establishing connection through Tor proxy"); + + let stream = + Socks5Stream::connect((Ipv4Addr::LOCALHOST, self.socks_port), address.to_string()) + .await + .map_err(|e| io::Error::new(io::ErrorKind::ConnectionRefused, e))?; + + tracing::debug!("Connection through Tor established"); + + Ok(TcpStream(stream.into_inner())) + }; + + Ok(dial_future.boxed()) + } } /// Represents an address that is _compatible_ with Tor, i.e. can be resolved by