diff --git a/mutiny-core/src/chain.rs b/mutiny-core/src/chain.rs index 7aa55a4d4..9df6879db 100644 --- a/mutiny-core/src/chain.rs +++ b/mutiny-core/src/chain.rs @@ -49,7 +49,7 @@ impl MutinyChain { client.connect().await; let tag = Tag::Generic("magic".into(), vec![network_magic.to_hex()]); - let base64_tx = base64::encode(&tx.encode()); + let base64_tx = base64::encode(tx.encode()); let event = nostr_sdk::event::builder::EventBuilder::new(28333.into(), base64_tx, &[tag]) .to_event(&ephemeral_key)?; @@ -75,7 +75,7 @@ impl BroadcasterInterface for MutinyChain { fn broadcast_transaction(&self, tx: &Transaction) { let blockchain = self.tx_sync.clone(); let tx_clone = tx.clone(); - let magic = self.network_magic.clone(); + let magic = self.network_magic; spawn_local(async move { // broadcast to esplora client maybe_await!(blockchain.client().broadcast(&tx_clone)) diff --git a/mutiny-core/src/event.rs b/mutiny-core/src/event.rs index 2cbd3761a..0cb7b5a7c 100644 --- a/mutiny-core/src/event.rs +++ b/mutiny-core/src/event.rs @@ -8,6 +8,7 @@ use anyhow::anyhow; use bitcoin::hashes::hex::ToHex; use bitcoin::secp256k1::PublicKey; use bitcoin::secp256k1::Secp256k1; +use lightning::chain::chaininterface::BroadcasterInterface; use lightning::chain::keysinterface::SpendableOutputDescriptor; use lightning::events::{Event, PaymentPurpose}; use lightning::{ @@ -627,7 +628,7 @@ impl EventHandler { ) .map_err(|_| anyhow!("Failed to spend spendable outputs"))?; - self.wallet.blockchain.broadcast(&spending_tx).await?; + self.wallet.chain.broadcast_transaction(&spending_tx); Ok(()) } diff --git a/mutiny-core/src/nodemanager.rs b/mutiny-core/src/nodemanager.rs index 7ceaf111b..ba202a27b 100644 --- a/mutiny-core/src/nodemanager.rs +++ b/mutiny-core/src/nodemanager.rs @@ -307,14 +307,6 @@ impl NodeManager { let esplora = Arc::new(tx_sync.client().clone()); let fee_estimator = Arc::new(MutinyFeeEstimator::new(storage.clone(), esplora.clone())); - let wallet = Arc::new(MutinyWallet::new( - &mnemonic, - storage.clone(), - network, - esplora.clone(), - fee_estimator.clone(), - )?); - let network_magic = match network { Network::Bitcoin => Network::Bitcoin.magic().to_le_bytes(), Network::Testnet => Network::Testnet.magic().to_le_bytes(), @@ -323,6 +315,14 @@ impl NodeManager { }; let chain = Arc::new(MutinyChain::new(tx_sync, network_magic)); + let wallet = Arc::new(MutinyWallet::new( + &mnemonic, + storage.clone(), + network, + chain.clone(), + fee_estimator.clone(), + )?); + // We don't need to actually sync gossip in tests unless we need to test gossip #[cfg(test)] let (gossip_sync, scorer) = diff --git a/mutiny-core/src/wallet.rs b/mutiny-core/src/wallet.rs index f049b8ba3..0f0467f7d 100644 --- a/mutiny-core/src/wallet.rs +++ b/mutiny-core/src/wallet.rs @@ -1,16 +1,15 @@ use std::str::FromStr; use std::sync::{Arc, RwLock}; +use crate::chain::MutinyChain; use bdk::chain::{BlockId, ConfirmationTime}; use bdk::template::DescriptorTemplateOut; use bdk::{FeeRate, LocalUtxo, SignOptions, TransactionDetails, Wallet}; -use bdk_esplora::{esplora_client, EsploraAsyncExt}; -use bdk_macros::maybe_await; +use bdk_esplora::EsploraAsyncExt; use bip39::Mnemonic; use bitcoin::util::bip32::{ChildNumber, DerivationPath, ExtendedPrivKey}; use bitcoin::{Address, Network, OutPoint, Script, Transaction, Txid}; -use esplora_client::AsyncClient; -use lightning::chain::chaininterface::{ConfirmationTarget, FeeEstimator}; +use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator}; use log::debug; use crate::error::MutinyError; @@ -21,7 +20,7 @@ use crate::indexed_db::MutinyStorage; pub struct MutinyWallet { pub wallet: Arc>>, pub network: Network, - pub blockchain: Arc, + pub chain: Arc, pub fees: Arc, } @@ -30,7 +29,7 @@ impl MutinyWallet { mnemonic: &Mnemonic, db: MutinyStorage, network: Network, - esplora: Arc, + chain: Arc, fees: Arc, ) -> Result { let seed = mnemonic.to_seed(""); @@ -49,7 +48,7 @@ impl MutinyWallet { Ok(MutinyWallet { wallet: Arc::new(RwLock::new(wallet)), network, - blockchain: esplora, + chain, fees, }) } @@ -69,7 +68,9 @@ impl MutinyWallet { }; let update = self - .blockchain + .chain + .tx_sync + .client() .scan( &checkpoints, spks, @@ -193,7 +194,7 @@ impl MutinyWallet { let raw_transaction = psbt.extract_tx(); let txid = raw_transaction.txid(); - maybe_await!(self.blockchain.broadcast(&raw_transaction))?; + self.chain.broadcast_transaction(&raw_transaction); debug!("Transaction broadcast! TXID: {txid}"); Ok(txid) } @@ -243,7 +244,7 @@ impl MutinyWallet { let raw_transaction = psbt.extract_tx(); let txid = raw_transaction.txid(); - maybe_await!(self.blockchain.broadcast(&raw_transaction))?; + self.chain.broadcast_transaction(&raw_transaction); debug!("Transaction broadcast! TXID: {txid}"); Ok(txid) }