Skip to content

Commit 48a760c

Browse files
Add persisted payment metadata reading in store
Issue #425
1 parent be52bc0 commit 48a760c

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/builder.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use crate::liquidity::{
2323
};
2424
use crate::logger::{log_error, log_info, LdkLogger, LogLevel, LogWriter, Logger};
2525
use crate::message_handler::NodeCustomMessageHandler;
26-
use crate::payment::store::PaymentStore;
26+
use crate::payment::store::{PaymentMetadataStore, PaymentStore};
2727
use crate::peer_store::PeerStore;
2828
use crate::tx_broadcaster::TransactionBroadcaster;
2929
use crate::types::{
@@ -1023,6 +1023,18 @@ fn build_with_store_internal(
10231023
},
10241024
};
10251025

1026+
let metadata_store = match io::utils::read_metadata(Arc::clone(&kv_store), Arc::clone(&logger))
1027+
{
1028+
Ok(metadata) => Arc::new(PaymentMetadataStore::new(
1029+
metadata,
1030+
Arc::clone(&kv_store),
1031+
Arc::clone(&logger),
1032+
)),
1033+
Err(_) => {
1034+
return Err(BuildError::ReadFailed);
1035+
},
1036+
};
1037+
10261038
let wallet = Arc::new(Wallet::new(
10271039
bdk_wallet,
10281040
wallet_persister,
@@ -1513,6 +1525,7 @@ fn build_with_store_internal(
15131525
scorer,
15141526
peer_store,
15151527
payment_store,
1528+
metadata_store,
15161529
is_listening,
15171530
node_metrics,
15181531
})

src/io/utils.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use crate::io::{
1414
NODE_METRICS_KEY, NODE_METRICS_PRIMARY_NAMESPACE, NODE_METRICS_SECONDARY_NAMESPACE,
1515
};
1616
use crate::logger::{log_error, LdkLogger, Logger};
17+
use crate::payment::store::PaymentMetadata;
1718
use crate::peer_store::PeerStore;
1819
use crate::sweep::DeprecatedSpendableOutputInfo;
1920
use crate::types::{Broadcaster, DynStore, KeysManager, Sweeper};
@@ -232,6 +233,36 @@ where
232233
Ok(res)
233234
}
234235

236+
/// Read previously persisted payment metadata information from the store.
237+
pub(crate) fn read_metadata<L: Deref>(
238+
kv_store: Arc<DynStore>, logger: L,
239+
) -> Result<Vec<PaymentMetadata>, std::io::Error>
240+
where
241+
L::Target: LdkLogger,
242+
{
243+
let mut res = Vec::new();
244+
245+
for stored_key in kv_store.list(
246+
PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE,
247+
PAYMENT_METADATA_INFO_PERSISTENCE_SECONDARY_NAMESPACE,
248+
)? {
249+
let mut reader = Cursor::new(kv_store.read(
250+
PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE,
251+
PAYMENT_METADATA_INFO_PERSISTENCE_SECONDARY_NAMESPACE,
252+
&stored_key,
253+
)?);
254+
let payment = PaymentMetadata::read(&mut reader).map_err(|e| {
255+
log_error!(logger, "Failed to deserialize PaymentMetadata: {}", e);
256+
std::io::Error::new(
257+
std::io::ErrorKind::InvalidData,
258+
"Failed to deserialize PaymentMetadata",
259+
)
260+
})?;
261+
res.push(payment);
262+
}
263+
Ok(res)
264+
}
265+
235266
/// Read `OutputSweeper` state from the store.
236267
pub(crate) fn read_output_sweeper(
237268
broadcaster: Arc<Broadcaster>, fee_estimator: Arc<OnchainFeeEstimator>,

0 commit comments

Comments
 (0)