Check that the node we connect to matches the user-provided chain
authorMatt Corallo <git@bluematt.me>
Tue, 4 May 2021 17:44:04 +0000 (17:44 +0000)
committerMatt Corallo <git@bluematt.me>
Tue, 4 May 2021 18:39:25 +0000 (18:39 +0000)
src/convert.rs
src/main.rs

index 7dbd8cceb13caca3938a35077f205b1ff96aa386..a652980e3ddbd9a20e6cbf5e54092938a1ffb5ac 100644 (file)
@@ -72,6 +72,7 @@ impl TryInto<FeeResponse> for JsonResponse {
 pub struct BlockchainInfo {
        pub latest_height: usize,
        pub latest_blockhash: BlockHash,
 pub struct BlockchainInfo {
        pub latest_height: usize,
        pub latest_blockhash: BlockHash,
+       pub chain: String,
 }
 
 impl TryInto<BlockchainInfo> for JsonResponse {
 }
 
 impl TryInto<BlockchainInfo> for JsonResponse {
@@ -81,6 +82,7 @@ impl TryInto<BlockchainInfo> for JsonResponse {
                        latest_height: self.0["blocks"].as_u64().unwrap() as usize,
                        latest_blockhash: BlockHash::from_hex(self.0["bestblockhash"].as_str().unwrap())
                                .unwrap(),
                        latest_height: self.0["blocks"].as_u64().unwrap() as usize,
                        latest_blockhash: BlockHash::from_hex(self.0["bestblockhash"].as_str().unwrap())
                                .unwrap(),
+                       chain: self.0["chain"].as_str().unwrap().to_string(),
                })
        }
 }
                })
        }
 }
index 21dfb284a81eeae3e9b1366a41e55fc4cd891378..7f4b5bf4a3b2e72b79983b26ca3124a6eaed95d5 100644 (file)
@@ -290,6 +290,18 @@ async fn start_ldk() {
                }
        };
 
                }
        };
 
+       // Check that the bitcoind we've connected to is running the network we expect
+       let bitcoind_chain = bitcoind_client.get_blockchain_info().await.chain;
+       if bitcoind_chain != match args.network {
+               bitcoin::Network::Bitcoin => "main",
+               bitcoin::Network::Testnet => "test",
+               bitcoin::Network::Regtest => "regtest",
+               bitcoin::Network::Signet => "signet",
+       } {
+               println!("Chain argument ({}) didn't match bitcoind chain ({})", args.network, bitcoind_chain);
+               return;
+       }
+
        // ## Setup
        // Step 1: Initialize the FeeEstimator
 
        // ## Setup
        // Step 1: Initialize the FeeEstimator