Switching to Bitcoin Testnet as Signet does not appear to work with Electrum atm
This commit is contained in:
@@ -17,9 +17,11 @@ bft-crdt-derive = { path = "../crates/bft-json-crdt/bft-crdt-derive" }
|
||||
bitcoin = { version = "0.32.2", features = ["rand"] }
|
||||
clap = { version = "4.5.4", features = ["derive"] }
|
||||
dirs = "5.0.1"
|
||||
electrum-client = "0.20"
|
||||
ezsockets = { version = "*", features = ["client"] }
|
||||
fastcrypto = "0.1.8"
|
||||
indexmap = { version = "2.2.6", features = ["serde"] }
|
||||
reqwest = { version = "*", features = ["blocking"] }
|
||||
# serde_cbor = "0.11.2" # move to this once we need to pack things in CBOR
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0.117"
|
||||
|
||||
@@ -1,37 +1,71 @@
|
||||
use crate::{keys, utils};
|
||||
|
||||
use bdk::bitcoin::base64;
|
||||
use bdk::bitcoin::psbt::PartiallySignedTransaction;
|
||||
use bdk::blockchain::Progress;
|
||||
use bdk::database::MemoryDatabase;
|
||||
use bdk::wallet::AddressIndex::{self, New};
|
||||
use bdk::{blockchain::ElectrumBlockchain, electrum_client, SyncOptions};
|
||||
use bdk::{FeeRate, SignOptions, TransactionDetails, Wallet};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct CustomProgress;
|
||||
|
||||
impl Progress for CustomProgress {
|
||||
fn update(&self, progress: f32, message: Option<String>) -> Result<(), bdk::Error> {
|
||||
println!("Progress: {} - {:?}", progress, message);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn run() -> Result<(), anyhow::Error> {
|
||||
let dave = utils::home(&"dave".to_string());
|
||||
let sammy = utils::home(&"sammy".to_string());
|
||||
|
||||
// Load mnemonics from disk
|
||||
let dave_wallet = keys::bitcoin::load_from_file(&dave).unwrap();
|
||||
let sammy_wallet = keys::bitcoin::load_from_file(&sammy).unwrap();
|
||||
|
||||
// let dave_address = dave_wallet.get_address(bdk::wallet::AddressIndex::New)?;
|
||||
// println!("Dave address: {:?}", dave_address);
|
||||
|
||||
// let sammy_address = sammy_wallet.get_address(bdk::wallet::AddressIndex::New)?;
|
||||
// println!("Sammy address: {:?}", sammy_address);
|
||||
// Verify explicitly that the address is derived as expected
|
||||
let expected_address = "tb1q88e45m4akrg2y00n4077vn90q8qw0svz7dss6k";
|
||||
let derived_address = dave_wallet.get_address(AddressIndex::Peek(0))?.to_string();
|
||||
assert_eq!(expected_address, derived_address);
|
||||
|
||||
let blockchain = ElectrumBlockchain::from(electrum_client::Client::new(
|
||||
"ssl://electrum.blockstream.info:60002",
|
||||
)?);
|
||||
|
||||
// let dave_balance = dave_wallet.get_balance()?;
|
||||
// println!("Wallet balance before syncing: {} sats", dave_balance);
|
||||
|
||||
// let sammy_balance = sammy_wallet.get_balance()?;
|
||||
// println!("Wallet balance before syncing: {} sats", sammy_balance);
|
||||
|
||||
println!("Syncing...");
|
||||
dave_wallet.sync(&blockchain, SyncOptions::default())?;
|
||||
|
||||
println!(
|
||||
"Wallet balance for {} after syncing: {:?} sats",
|
||||
dave_wallet.get_address(bdk::wallet::AddressIndex::LastUnused)?,
|
||||
dave_wallet.get_balance()?
|
||||
"Wallet balance for {} after syncing: {:?} sats on network {}",
|
||||
dave_wallet.get_address(bdk::wallet::AddressIndex::Peek(0))?,
|
||||
dave_wallet.get_balance()?,
|
||||
dave_wallet.network()
|
||||
);
|
||||
|
||||
let transactions = dave_wallet.list_transactions(false)?;
|
||||
println!("Transaction History: {:?}", transactions);
|
||||
|
||||
let (mut psbt, details) = build_sending_tx(&dave_wallet).expect("psbt fukked");
|
||||
|
||||
println!("Transaction details: {:#?}", details);
|
||||
println!("Unsigned PSBT: {}", base64::encode(psbt.serialize()));
|
||||
// let mut psbt = Psbt::deserialize(&base64::decode(psbt).unwrap())?;
|
||||
let _finalized = dave_wallet.sign(&mut psbt, SignOptions::default())?;
|
||||
|
||||
println!("Finalized: {}", _finalized);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn build_sending_tx(
|
||||
wallet: &Wallet<MemoryDatabase>,
|
||||
) -> anyhow::Result<(PartiallySignedTransaction, TransactionDetails), anyhow::Error> {
|
||||
let send_to = wallet.get_address(New)?;
|
||||
|
||||
let mut builder = wallet.build_tx();
|
||||
builder
|
||||
.add_recipient(send_to.script_pubkey(), 500)
|
||||
.enable_rbf()
|
||||
.do_not_spend_change()
|
||||
.fee_rate(FeeRate::from_sat_per_vb(5.0));
|
||||
Ok(builder.finish()?)
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod btc_other_rpc;
|
||||
pub mod btc_rpc;
|
||||
pub mod test;
|
||||
pub mod websocket;
|
||||
|
||||
19
side-node/src/clients/test.rs
Normal file
19
side-node/src/clients/test.rs
Normal file
@@ -0,0 +1,19 @@
|
||||
use anyhow::Result;
|
||||
use reqwest::blocking::Client;
|
||||
|
||||
pub async fn run() -> Result<(), Box<dyn std::error::Error>> {
|
||||
// Set up the Esplora client
|
||||
let esplora_url = "https://blockstream.info/signet/api";
|
||||
let client = Client::new();
|
||||
|
||||
// Address to check
|
||||
let address = "tb1q88e45m4akrg2y00n4077vn90q8qw0svz7dss6k";
|
||||
|
||||
// Query balance
|
||||
let url = format!("{}/address/{}/utxo", esplora_url, address);
|
||||
let response = client.get(&url).send()?.text()?;
|
||||
|
||||
println!("UTXO for address: {}", response);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -45,7 +45,7 @@ pub fn create_wallet(mnemonic_words: String) -> anyhow::Result<Wallet<MemoryData
|
||||
let wallet = Wallet::new(
|
||||
Bip84(xprv, KeychainKind::External),
|
||||
Some(Bip84(xprv, KeychainKind::Internal)),
|
||||
Network::Signet,
|
||||
Network::Testnet,
|
||||
MemoryDatabase::default(),
|
||||
)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user