Skip to content

Commit 3249331

Browse files
committed
refactor(runtime): Add address and createtx to db
- Add new address, unused address and createtx commands to list of commands that require loading existing db - adding persisting changes in offline and online commands
1 parent 75b5141 commit 3249331

5 files changed

Lines changed: 47 additions & 32 deletions

File tree

src/handlers/online.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,14 @@ impl AsyncAppCommand<AppContext<OnlineOperations<'_>>> for FullScanCommand {
9696

9797
#[cfg(any(feature = "electrum", feature = "esplora"))]
9898
let request = wallet.start_full_scan().inspect({
99-
let mut stdout = std::io::stdout();
99+
let mut stderr = std::io::stderr();
100100
let mut once = HashSet::<KeychainKind>::new();
101101
move |k, spk_i, _| {
102102
if once.insert(k) {
103-
print!("\nScanning keychain [{k:?}]");
103+
eprint!("\nScanning keychain [{k:?}]");
104104
}
105-
print!(" {spk_i:<3}");
106-
stdout.flush().expect("must flush");
105+
eprint!(" {spk_i:<3}");
106+
stderr.flush().expect("must flush");
107107
}
108108
});
109109

src/handlers/repl.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ pub(crate) async fn respond(
9898
}
9999

100100
ReplSubCommand::Exit => None,
101-
// _ => todo!(), // Handled specifically depending on your ReplSubCommand definitions
102101
};
103102

104103
if response.is_some() {

src/main.rs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,32 +72,35 @@ async fn run(cli_opts: CliOpts) -> Result<(), Error> {
7272
))]
7373
WalletSubCommand::OnlineWalletSubCommand(cmd) => {
7474
let runtime = WalletRuntime::load(&home_dir, &wallet_name)?;
75-
7675
let mut wallet = runtime.build_wallet(true)?;
7776
let client = runtime.build_client(&wallet)?;
78-
79-
let mut ctx = AppContext::new_online_wallet(
80-
runtime.network,
81-
runtime.home_dir.clone(),
82-
&mut wallet,
83-
&client,
84-
);
85-
86-
cmd.execute(&mut ctx).await?;
77+
{
78+
let mut ctx = AppContext::new_online_wallet(
79+
runtime.network,
80+
runtime.home_dir.clone(),
81+
&mut wallet,
82+
&client,
83+
);
84+
85+
cmd.execute(&mut ctx).await?;
86+
}
87+
wallet.persist()?;
8788
}
8889

8990
WalletSubCommand::OfflineWalletSubCommand(cmd) => {
9091
let runtime = WalletRuntime::load(&home_dir, &wallet_name)?;
91-
9292
let mut wallet = runtime.build_wallet(command_requires_db(&cmd))?;
9393

94-
let mut ctx = AppContext::new_offline_wallet(
95-
runtime.network,
96-
runtime.home_dir.clone(),
97-
&mut wallet,
98-
);
94+
{
95+
let mut ctx = AppContext::new_offline_wallet(
96+
runtime.network,
97+
runtime.home_dir.clone(),
98+
&mut wallet,
99+
);
99100

100-
cmd.execute(&mut ctx)?;
101+
cmd.execute(&mut ctx)?;
102+
}
103+
wallet.persist()?;
101104
}
102105

103106
WalletSubCommand::Config(mut config_cmd) => {

src/utils/common.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,12 @@ pub fn command_requires_db(command: &OfflineWalletSubCommand) -> bool {
224224
OfflineWalletSubCommand::Balance(_)
225225
| OfflineWalletSubCommand::Unspent(_)
226226
| OfflineWalletSubCommand::Transactions(_)
227-
| OfflineWalletSubCommand::BumpFee(_) => true,
228-
229-
OfflineWalletSubCommand::NewAddress(_)
227+
| OfflineWalletSubCommand::BumpFee(_)
228+
| OfflineWalletSubCommand::NewAddress(_)
230229
| OfflineWalletSubCommand::UnusedAddress(_)
231-
| OfflineWalletSubCommand::CreateTx(_)
232-
| OfflineWalletSubCommand::Policies(_)
230+
| OfflineWalletSubCommand::CreateTx(_) => true,
231+
232+
OfflineWalletSubCommand::Policies(_)
233233
| OfflineWalletSubCommand::PublicDescriptor(_)
234234
| OfflineWalletSubCommand::Sign(_)
235235
| OfflineWalletSubCommand::ExtractPsbt(_)

src/utils/runtime.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::{
88

99
use crate::{
1010
error::BDKCliError as Error,
11-
persister::new_wallet,
11+
persister::{self, new_wallet},
1212
utils::{load_wallet_config, prepare_wallet_db_dir},
1313
};
1414
#[cfg(any(feature = "sqlite", feature = "redb"))]
@@ -28,7 +28,7 @@ use crate::client::{BlockchainClient, new_blockchain_client};
2828
pub enum RuntimeWallet {
2929
Standard(Wallet),
3030
#[cfg(any(feature = "sqlite", feature = "redb"))]
31-
Persisted(PersistedWallet<Persister>),
31+
Persisted(PersistedWallet<Persister>, Persister),
3232
}
3333

3434
impl Deref for RuntimeWallet {
@@ -37,7 +37,7 @@ impl Deref for RuntimeWallet {
3737
match self {
3838
Self::Standard(wallet) => wallet,
3939
#[cfg(any(feature = "sqlite", feature = "redb"))]
40-
Self::Persisted(wallet) => wallet,
40+
Self::Persisted(wallet, _) => wallet,
4141
}
4242
}
4343
}
@@ -47,7 +47,20 @@ impl DerefMut for RuntimeWallet {
4747
match self {
4848
Self::Standard(wallet) => wallet,
4949
#[cfg(any(feature = "sqlite", feature = "redb"))]
50-
Self::Persisted(wallet) => wallet,
50+
Self::Persisted(wallet, _) => wallet,
51+
}
52+
}
53+
}
54+
55+
impl RuntimeWallet {
56+
pub fn persist(&mut self) -> Result<(), Error> {
57+
match self {
58+
Self::Standard(_) => Ok(()),
59+
#[cfg(any(feature = "sqlite", feature = "redb"))]
60+
Self::Persisted(wallet, persister) => {
61+
wallet.persist(persister)?;
62+
Ok(())
63+
}
5164
}
5265
}
5366
}
@@ -88,7 +101,7 @@ impl WalletRuntime {
88101
{
89102
let mut persister = self.create_persister()?;
90103
let wallet = new_persisted_wallet(self.network, &mut persister, &self.wallet_opts)?;
91-
Ok(RuntimeWallet::Persisted(wallet))
104+
Ok(RuntimeWallet::Persisted(wallet, persister))
92105
}
93106

94107
#[cfg(not(any(feature = "sqlite", feature = "redb")))]

0 commit comments

Comments
 (0)