]> Untitled Git - bdk-cli/commitdiff
refactor: update nodes.rs file
authorVihiga Tyonum <withtvpeter@gmail.com>
Tue, 11 Feb 2025 23:50:19 +0000 (00:50 +0100)
committerVihiga Tyonum <withtvpeter@gmail.com>
Wed, 12 Feb 2025 00:15:52 +0000 (01:15 +0100)
- replace `bitcoincore_rpc` client with
`electrsd::Node` client
- update rpc commands
- update `electrsd` to v0.31.0

[Ticket: X]

Cargo.lock
Cargo.toml
src/error.rs
src/nodes.rs

index d1cefbacff7c3b873ccaed211655016e9a972176..a6766652f6e76c08c7f00e000d04a3143542d3d1 100644 (file)
@@ -50,6 +50,12 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "anyhow"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
+
 [[package]]
 name = "arrayvec"
 version = "0.7.6"
@@ -161,21 +167,6 @@ version = "0.21.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
 
-[[package]]
-name = "base64"
-version = "0.22.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
-
-[[package]]
-name = "base64-compat"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a8d4d2746f89841e49230dd26917df1876050f95abafafbe34f47cb534b88d7"
-dependencies = [
- "byteorder",
-]
-
 [[package]]
 name = "base64ct"
 version = "1.6.0"
@@ -266,7 +257,7 @@ checksum = "2ac1a1da33a22949c3e2b3a715431eaed50c2c9278c8cdac06f0254b7659291f"
 dependencies = [
  "bdk_core",
  "bitcoin 0.32.5",
- "bitcoincore-rpc 0.19.0",
+ "bitcoincore-rpc",
 ]
 
 [[package]]
@@ -310,7 +301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b272d5a3228799f7c917255fe26e788f6c29dd4a084a342d274a44352bbc0915"
 dependencies = [
  "bdk_core",
- "electrum-client 0.22.0",
+ "electrum-client",
 ]
 
 [[package]]
@@ -387,18 +378,6 @@ dependencies = [
  "unicode-normalization",
 ]
 
-[[package]]
-name = "bitcoin"
-version = "0.29.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0694ea59225b0c5f3cb405ff3f670e4828358ed26aec49dc352f730f0cb1a8a3"
-dependencies = [
- "bech32 0.9.1",
- "bitcoin_hashes 0.11.0",
- "secp256k1 0.24.3",
- "serde",
-]
-
 [[package]]
 name = "bitcoin"
 version = "0.30.2"
@@ -470,15 +449,6 @@ dependencies = [
  "serde",
 ]
 
-[[package]]
-name = "bitcoin_hashes"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4"
-dependencies = [
- "serde",
-]
-
 [[package]]
 name = "bitcoin_hashes"
 version = "0.12.0"
@@ -520,43 +490,19 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "bitcoincore-rpc"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0261b2bb7617e0c91b452a837bbd1291fd34ad6990cb8e3ffc28239cc045b5ca"
-dependencies = [
- "bitcoincore-rpc-json 0.16.0",
- "jsonrpc 0.12.1",
- "log",
- "serde",
- "serde_json",
-]
-
 [[package]]
 name = "bitcoincore-rpc"
 version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "aedd23ae0fd321affb4bbbc36126c6f49a32818dc6b979395d24da8c9d4e80ee"
 dependencies = [
- "bitcoincore-rpc-json 0.19.0",
- "jsonrpc 0.18.0",
+ "bitcoincore-rpc-json",
+ "jsonrpc",
  "log",
  "serde",
  "serde_json",
 ]
 
-[[package]]
-name = "bitcoincore-rpc-json"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c231bea28e314879c5aef240f6052e8a72a369e3c9f9b20d9bfbb33ad18029b2"
-dependencies = [
- "bitcoin 0.29.2",
- "serde",
- "serde_json",
-]
-
 [[package]]
 name = "bitcoincore-rpc-json"
 version = "0.19.0"
@@ -568,25 +514,6 @@ dependencies = [
  "serde_json",
 ]
 
-[[package]]
-name = "bitcoind"
-version = "0.28.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0716f11ae8033a7fe9c4aa06e9dbd798fb74d13d15bd890fedc10c996bf448a"
-dependencies = [
- "bitcoin_hashes 0.11.0",
- "bitcoincore-rpc 0.16.0",
- "filetime",
- "flate2",
- "log",
- "tar",
- "tempfile",
- "time",
- "ureq",
- "which",
- "zip",
-]
-
 [[package]]
 name = "bitflags"
 version = "1.3.2"
@@ -649,9 +576,9 @@ dependencies = [
 
 [[package]]
 name = "cc"
-version = "1.2.12"
+version = "1.2.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2"
+checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda"
 dependencies = [
  "jobserver",
  "libc",
@@ -754,9 +681,9 @@ dependencies = [
 
 [[package]]
 name = "cmake"
-version = "0.1.53"
+version = "0.1.54"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e24a03c8b52922d68a1589ad61032f2c1aa5a8158d2aa0d93c6e9534944bbad6"
+checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0"
 dependencies = [
  "cc",
 ]
@@ -783,6 +710,46 @@ version = "0.8.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
 
+[[package]]
+name = "corepc-client"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb85495f0577f4765ea2ece0a69003d38acdddba2ac06bdde180ac2b969a9a63"
+dependencies = [
+ "bitcoin 0.32.5",
+ "corepc-types",
+ "jsonrpc",
+ "log",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "corepc-node"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "887faf7fdf38a5b99b3efb69e18e27fb9de77c812c5c48956a8076c7f9076b99"
+dependencies = [
+ "anyhow",
+ "corepc-client",
+ "log",
+ "serde_json",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "corepc-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282d9bd7fd9d944471a0c0ad44fd1581acd87a79739652c5455ffdae25177db6"
+dependencies = [
+ "bitcoin 0.32.5",
+ "bitcoin-internals 0.3.0",
+ "serde",
+ "serde_json",
+]
+
 [[package]]
 name = "cpufeatures"
 version = "0.2.17"
@@ -874,31 +841,21 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
 
 [[package]]
 name = "electrsd"
-version = "0.22.2"
+version = "0.31.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a51f3d3808c1ec7e7e0b434fd9e2be0e5ac973441c9929395ab2b14a952333d9"
+checksum = "eaa7f6661c5890f51f09f54fb225cd37058202cf0ba53dbbd92a4374fe035904"
 dependencies = [
- "bitcoin_hashes 0.11.0",
- "bitcoind",
- "electrum-client 0.12.1",
+ "bitcoin_hashes 0.14.0",
+ "corepc-client",
+ "corepc-node",
+ "electrum-client",
  "log",
+ "minreq",
  "nix 0.25.1",
- "ureq",
+ "which",
  "zip",
 ]
 
-[[package]]
-name = "electrum-client"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8e1e1e452aef3ee772d19cc6272ef642f22ce0f4a9fb715ffe98010934e2ae1"
-dependencies = [
- "bitcoin 0.29.2",
- "log",
- "serde",
- "serde_json",
-]
-
 [[package]]
 name = "electrum-client"
 version = "0.22.0"
@@ -912,7 +869,7 @@ dependencies = [
  "rustls 0.23.22",
  "serde",
  "serde_json",
- "webpki-roots 0.25.4",
+ "webpki-roots",
  "winapi",
 ]
 
@@ -1013,18 +970,6 @@ dependencies = [
  "windows-sys 0.28.0",
 ]
 
-[[package]]
-name = "filetime"
-version = "0.2.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
-dependencies = [
- "cfg-if",
- "libc",
- "libredox",
- "windows-sys 0.59.0",
-]
-
 [[package]]
 name = "flate2"
 version = "1.0.35"
@@ -1614,18 +1559,6 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "jsonrpc"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f8423b78fc94d12ef1a4a9d13c348c9a78766dda0cc18817adf0faf77e670c8"
-dependencies = [
- "base64-compat",
- "serde",
- "serde_derive",
- "serde_json",
-]
-
 [[package]]
 name = "jsonrpc"
 version = "0.18.0"
@@ -1674,7 +1607,6 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
 dependencies = [
  "bitflags 2.8.0",
  "libc",
- "redox_syscall",
 ]
 
 [[package]]
@@ -1796,7 +1728,7 @@ dependencies = [
  "rustls-webpki 0.101.7",
  "serde",
  "serde_json",
- "webpki-roots 0.25.4",
+ "webpki-roots",
 ]
 
 [[package]]
@@ -2486,7 +2418,6 @@ dependencies = [
  "aws-lc-rs",
  "log",
  "once_cell",
- "ring",
  "rustls-pki-types",
  "rustls-webpki 0.102.8",
  "subtle",
@@ -2594,17 +2525,6 @@ dependencies = [
  "secp256k1-sys 0.5.2",
 ]
 
-[[package]]
-name = "secp256k1"
-version = "0.24.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62"
-dependencies = [
- "bitcoin_hashes 0.11.0",
- "secp256k1-sys 0.6.1",
- "serde",
-]
-
 [[package]]
 name = "secp256k1"
 version = "0.27.0"
@@ -2638,15 +2558,6 @@ dependencies = [
  "cc",
 ]
 
-[[package]]
-name = "secp256k1-sys"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b"
-dependencies = [
- "cc",
-]
-
 [[package]]
 name = "secp256k1-sys"
 version = "0.8.1"
@@ -2875,17 +2786,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "tar"
-version = "0.4.43"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6"
-dependencies = [
- "filetime",
- "libc",
- "xattr",
-]
-
 [[package]]
 name = "target-lexicon"
 version = "0.12.16"
@@ -3142,22 +3042,6 @@ version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
 
-[[package]]
-name = "ureq"
-version = "2.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d"
-dependencies = [
- "base64 0.22.1",
- "flate2",
- "log",
- "once_cell",
- "rustls 0.23.22",
- "rustls-pki-types",
- "url",
- "webpki-roots 0.26.8",
-]
-
 [[package]]
 name = "url"
 version = "2.5.4"
@@ -3318,15 +3202,6 @@ version = "0.25.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
 
-[[package]]
-name = "webpki-roots"
-version = "0.26.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
-dependencies = [
- "rustls-pki-types",
-]
-
 [[package]]
 name = "which"
 version = "4.4.2"
@@ -3592,17 +3467,6 @@ version = "0.5.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
 
-[[package]]
-name = "xattr"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909"
-dependencies = [
- "libc",
- "linux-raw-sys",
- "rustix",
-]
-
 [[package]]
 name = "yoke"
 version = "0.7.5"
index 7e9a01314aea747a1c60b36fa4e6f04bfa5c4183..4dadc11cdbb8a88b97cef8f9e008f3f208730574 100644 (file)
@@ -29,7 +29,7 @@ rustyline = { version = "~9.0", optional = true }
 fd-lock = { version = "=3.0.2", optional = true }
 regex = { version = "1", optional = true }
 bdk-reserves = {version = "0.29.0", optional = true}
-electrsd = { version= "0.22", features = ["bitcoind_22_0"], optional = true}
+electrsd = { version= "0.31.0", optional = true}
 bdk_electrum ={ version = "0.20.1", optional = true}
 bdk_esplora ={ version = "0.15.0", features = ["async"], optional = true}
 bdk_bitcoind_rpc = {version = "0.17.1", optional = true}
index b5996aa983782db0562f4360851a5c4b00329f77..2f3dce3aa2d89f76a402f2a75293f8da839a75cc 100644 (file)
@@ -18,6 +18,9 @@ pub enum BDKCliError {
     #[error("Create transaction error: {0}")]
     CreateTx(#[from] bdk_wallet::error::CreateTxError),
 
+    #[error("CoreRPC error: {0}")]
+    CoreRPCError(#[from] electrsd::corepc_client::client_sync::Error),
+
     #[error("Descriptor error: {0}")]
     DescriptorError(#[from] bdk_wallet::descriptor::error::Error),
 
index b9b792110a04cf5203dffc8b384ea595f6a1adec..00a98f2b545d6e9d5df4f70eb24373f97f3585ce 100644 (file)
 
 #[cfg(feature = "regtest-node")]
 use {
-    crate::commands::NodeSubCommand,
-    bdk_wallet::{
-        bitcoin::{Address, Amount},
-        Error,
-    },
-    electrsd::bitcoind::bitcoincore_rpc::{Client, RpcApi},
+    crate::{commands::NodeSubCommand, error::BDKCliError as Error},
+    bdk_wallet::bitcoin::{Address, Amount},
+    electrsd::corepc_node::{Client, Node},
     serde_json::Value,
     std::str::FromStr,
 };
@@ -34,20 +31,20 @@ pub enum Nodes {
     #[cfg(feature = "regtest-bitcoin")]
     /// A bitcoin core backend. Wallet connected to it via RPC.
     Bitcoin {
-        bitcoind: Box<electrsd::bitcoind::BitcoinD>,
+        bitcoind: Box<Node>,
     },
     #[cfg(feature = "regtest-electrum")]
     /// An Electrum backend with an underlying bitcoin core
     /// Wallet connected to it, via the electrum url.
     Electrum {
-        bitcoind: Box<electrsd::bitcoind::BitcoinD>,
+        bitcoind: Box<Node>,
         electrsd: Box<electrsd::ElectrsD>,
     },
     /// An Esplora backend with an underlying bitcoin core
     /// Wallet connected to it, via the esplora url.
     #[cfg(any(feature = "regtest-esplora-ureq", feature = "regtest-esplora-reqwest"))]
     Esplora {
-        bitcoind: Box<electrsd::bitcoind::BitcoinD>,
+        bitcoind: Box<Node>,
         esplorad: Box<electrsd::ElectrsD>,
     },
 }
@@ -58,42 +55,21 @@ impl Nodes {
     pub fn exec_cmd(&self, cmd: NodeSubCommand) -> Result<serde_json::Value, Error> {
         let client = self.get_client()?;
         match cmd {
-            NodeSubCommand::GetInfo => Ok(serde_json::to_value(
-                client
-                    .get_blockchain_info()
-                    .map_err(|e| Error::Generic(e.to_string()))?,
-            )?),
-
-            NodeSubCommand::GetNewAddress => Ok(serde_json::to_value(
-                client
-                    .get_new_address(None, None)
-                    .map_err(|e| Error::Generic(e.to_string()))?,
-            )?),
+            NodeSubCommand::GetInfo => Ok(serde_json::to_value(client.get_blockchain_info()?)?),
+            NodeSubCommand::GetNewAddress => Ok(serde_json::to_value(client.new_address()?)?),
 
             NodeSubCommand::Generate { block_num } => {
-                let core_addrs = client
-                    .get_new_address(None, None)
-                    .map_err(|e| Error::Generic(e.to_string()))?;
-                let block_hashes = client
-                    .generate_to_address(block_num, &core_addrs)
-                    .map_err(|e| Error::Generic(e.to_string()))?;
+                let core_addrs = client.new_address()?;
+                let block_hashes = client.generate_to_address(block_num as usize, &core_addrs)?;
                 Ok(serde_json::to_value(block_hashes)?)
             }
 
-            NodeSubCommand::GetBalance => Ok(serde_json::to_value(
-                client
-                    .get_balance(None, None)
-                    .map_err(|e| Error::Generic(e.to_string()))?
-                    .to_string(),
-            )?),
+            NodeSubCommand::GetBalance => Ok(serde_json::to_value(client.get_balance()?)?),
 
             NodeSubCommand::SendToAddress { address, amount } => {
-                let address =
-                    Address::from_str(&address).map_err(|e| Error::Generic(e.to_string()))?;
+                let address = Address::from_str(&address)?.assume_checked();
                 let amount = Amount::from_sat(amount);
-                let txid = client
-                    .send_to_address(&address, amount, None, None, None, None, None, None)
-                    .map_err(|e| Error::Generic(e.to_string()))?;
+                let txid = client.send_to_address(&address, amount)?;
                 Ok(serde_json::to_value(&txid)?)
             }
 
@@ -103,9 +79,7 @@ impl Nodes {
                     .iter()
                     .map(|arg| serde_json::Value::from_str(arg))
                     .collect::<Result<Vec<Value>, _>>()?;
-                client
-                    .call::<Value>(cmd, &args)
-                    .map_err(|e| Error::Generic(e.to_string()))
+                Ok(client.call::<Value>(cmd, &args)?)
             }
         }
     }
@@ -119,7 +93,7 @@ impl Nodes {
             #[cfg(feature = "regtest-bitcoin")]
             Self::Bitcoin { bitcoind } => Ok(&bitcoind.client),
             #[cfg(feature = "regtest-electrum")]
-            Self::Electrum { bitcoind, .. } => Ok(&bitcoind.client),
+            Self::Electrum { bitcoind, .. } => Ok(&bitcoind.client), // question: shouldn't we initialize electrsd with bitcoind?
             #[cfg(any(feature = "regtest-esplora-ureq", feature = "regtest-esplora-reqwest"))]
             Self::Esplora { bitcoind, .. } => Ok(&bitcoind.client),
         }