@@ -3,12 +3,17 @@ use bdk_bitcoind_rpc::{
3
3
Emitter , MempoolEvent ,
4
4
} ;
5
5
use bdk_wallet:: {
6
- bitcoin:: { Block , Network , Txid } ,
6
+ bitcoin:: { Block , Network } ,
7
7
file_store:: Store ,
8
8
KeychainKind , Wallet ,
9
9
} ;
10
10
use clap:: { self , Parser } ;
11
- use std:: { path:: PathBuf , sync:: mpsc:: sync_channel, thread:: spawn, time:: Instant } ;
11
+ use std:: {
12
+ path:: PathBuf ,
13
+ sync:: { mpsc:: sync_channel, Arc } ,
14
+ thread:: spawn,
15
+ time:: Instant ,
16
+ } ;
12
17
13
18
const DB_MAGIC : & str = "bdk-rpc-wallet-example" ;
14
19
@@ -79,7 +84,7 @@ enum Emission {
79
84
fn main ( ) -> anyhow:: Result < ( ) > {
80
85
let args = Args :: parse ( ) ;
81
86
82
- let rpc_client = args. client ( ) ?;
87
+ let rpc_client = Arc :: new ( args. client ( ) ?) ;
83
88
println ! (
84
89
"Connected to Bitcoin Core RPC at {:?}" ,
85
90
rpc_client. get_blockchain_info( ) . unwrap( )
@@ -129,14 +134,15 @@ fn main() -> anyhow::Result<()> {
129
134
. expect ( "failed to send sigterm" )
130
135
} ) ;
131
136
132
- let emitter_tip = wallet_tip. clone ( ) ;
137
+ let mut emitter = Emitter :: new (
138
+ rpc_client,
139
+ wallet_tip,
140
+ args. start_height ,
141
+ wallet
142
+ . transactions ( )
143
+ . filter ( |tx| tx. chain_position . is_unconfirmed ( ) ) ,
144
+ ) ;
133
145
spawn ( move || -> Result < ( ) , anyhow:: Error > {
134
- let mut emitter = Emitter :: new (
135
- & rpc_client,
136
- emitter_tip,
137
- args. start_height ,
138
- core:: iter:: empty :: < Txid > ( ) ,
139
- ) ;
140
146
while let Some ( emission) = emitter. next_block ( ) ? {
141
147
sender. send ( Emission :: Block ( emission) ) ?;
142
148
}
@@ -167,6 +173,7 @@ fn main() -> anyhow::Result<()> {
167
173
}
168
174
Emission :: Mempool ( event) => {
169
175
let start_apply_mempool = Instant :: now ( ) ;
176
+ wallet. apply_evicted_txs ( event. evicted_ats ( ) ) ;
170
177
wallet. apply_unconfirmed_txs ( event. new_txs ) ;
171
178
wallet. persist ( & mut db) ?;
172
179
println ! (
0 commit comments