]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Support HTTPS Esplora endpoints via new feature
authorElias Rohrer <ero@tnull.de>
Wed, 8 Mar 2023 11:05:57 +0000 (12:05 +0100)
committerElias Rohrer <ero@tnull.de>
Wed, 8 Mar 2023 18:25:23 +0000 (19:25 +0100)
To support HTTPS endpoints, the async HTTP library `reqwest` needs one of
the `-tls` features enabled. While the users could specify this in their
own cargo dependencies, we here provide a new `esplora-async-https`
feature for conveinience.

.github/workflows/build.yml
lightning-transaction-sync/Cargo.toml
lightning-transaction-sync/src/lib.rs
lightning-transaction-sync/tests/integration_tests.rs

index 1c1472a1007cd214ff8248e186cbf5cfab1d8d89..10f71bda07ccb662432f6093df9be55e76cbc3a2 100644 (file)
@@ -127,18 +127,21 @@ jobs:
           cd lightning-transaction-sync
           cargo build --verbose --color always --features esplora-blocking
           cargo build --verbose --color always --features esplora-async
+          cargo build --verbose --color always --features esplora-async-https
       - name: Build transaction sync clients on Rust ${{ matrix.toolchain }} with features and full code-linking for coverage generation
         if: "matrix.build-tx-sync && matrix.coverage"
         run: |
           cd lightning-transaction-sync
           RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features esplora-blocking
           RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features esplora-async
+          RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features esplora-async-https
       - name: Test transaction sync clients on Rust ${{ matrix.toolchain }} with features
         if: "matrix.build-tx-sync"
         run: |
           cd lightning-transaction-sync
           cargo test --verbose --color always --features esplora-blocking
           cargo test --verbose --color always --features esplora-async
+          cargo test --verbose --color always --features esplora-async-https
       - name: Test backtrace-debug builds on Rust ${{ matrix.toolchain }}
         if: "matrix.toolchain == 'stable'"
         shell: bash # Default on Winblows is powershell
index 395410951db5c061f859b17d9fa7790dc4981e20..4ad581947404ea5aa462d1ec740855e2973efad7 100644 (file)
@@ -16,6 +16,7 @@ rustdoc-args = ["--cfg", "docsrs"]
 [features]
 default = []
 esplora-async = ["async-interface", "esplora-client/async", "futures"]
+esplora-async-https = ["esplora-async", "reqwest/rustls-tls"]
 esplora-blocking = ["esplora-client/blocking"]
 async-interface = []
 
@@ -25,6 +26,7 @@ bitcoin = { version = "0.29.0", default-features = false }
 bdk-macros = "0.6"
 futures = { version = "0.3", optional = true }
 esplora-client = { version = "0.3.0", default-features = false, optional = true }
+reqwest = { version = "0.11", optional = true, default-features = false, features = ["json"] }
 
 [dev-dependencies]
 lightning = { version = "0.0.114", path = "../lightning", features = ["std"] }
index 791490d9dfcf2b90f8bfceae99b6ed31304ba23a..05b71d21bb5faaa05d5b0cebccb252b69e9e8db0 100644 (file)
@@ -7,8 +7,9 @@
 //!
 //! ## Features and Backend Support
 //!
-//!- `esplora_blocking` enables syncing against an Esplora backend based on a blocking client.
-//!- `esplora_async` enables syncing against an Esplora backend based on an async client.
+//!- `esplora-blocking` enables syncing against an Esplora backend based on a blocking client.
+//!- `esplora-async` enables syncing against an Esplora backend based on an async client.
+//!- `esplora-async-https` enables the async Esplora client with support for HTTPS.
 //!
 //! ## Version Compatibility
 //!
index 276aeabf9e049b706b27779e3445078226cdc226..d2f0c70a123c6ff6e935b874296440d78a2451c2 100644 (file)
@@ -348,3 +348,20 @@ async fn test_esplora_syncs() {
                _ => panic!("Unexpected event"),
        }
 }
+
+#[tokio::test]
+#[cfg(any(feature = "esplora-async-https", feature = "esplora-blocking"))]
+async fn test_esplora_connects_to_public_server() {
+       let mut logger = TestLogger {};
+       let esplora_url = "https://blockstream.info/api".to_string();
+       let tx_sync = EsploraSyncClient::new(esplora_url, &mut logger);
+       let confirmable = TestConfirmable::new();
+
+       // Check we connect and pick up on new best blocks
+       assert_eq!(confirmable.best_block.lock().unwrap().1, 0);
+       #[cfg(feature = "esplora-async-https")]
+       tx_sync.sync(vec![&confirmable]).await.unwrap();
+       #[cfg(feature = "esplora-blocking")]
+       tx_sync.sync(vec![&confirmable]).unwrap();
+       assert_ne!(confirmable.best_block.lock().unwrap().1, 0);
+}