use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
use lightning::sign::{EntropySource, KeysManager, SpendableOutputDescriptor};
use lightning::util::logger::Logger;
-use lightning::util::persist::KVStorePersister;
-use lightning::util::ser::{Readable, WithoutLength};
+use lightning::util::persist::KVStore;
+use lightning::util::ser::{Readable, WithoutLength, Writeable};
+use lightning_persister::fs_store::FilesystemStore;
+
+use bitcoin::blockdata::locktime::absolute::LockTime;
use bitcoin::secp256k1::Secp256k1;
-use bitcoin::{LockTime, PackedLockTime};
use rand::{thread_rng, Rng};
use crate::hex_utils;
use crate::BitcoindClient;
use crate::ChannelManager;
use crate::FilesystemLogger;
-use crate::FilesystemPersister;
/// If we have any pending claimable outputs, we should slowly sweep them to our Bitcoin Core
/// wallet. We technically don't need to do this - they're ours to spend when we want and can just
/// we don't do that here either.
pub(crate) async fn periodic_sweep(
ldk_data_dir: String, keys_manager: Arc<KeysManager>, logger: Arc<FilesystemLogger>,
- persister: Arc<FilesystemPersister>, bitcoind_client: Arc<BitcoindClient>,
+ persister: Arc<FilesystemStore>, bitcoind_client: Arc<BitcoindClient>,
channel_manager: Arc<ChannelManager>,
) {
// Regularly claim outputs which are exclusively spendable by us and send them to Bitcoin Core.
if !outputs.is_empty() {
let key = hex_utils::hex_str(&keys_manager.get_secure_random_bytes());
persister
- .persist(&format!("spendable_outputs/{}", key), &WithoutLength(&outputs))
+ .write("spendable_outputs", "", &key, &WithoutLength(&outputs).encode())
.unwrap();
fs::remove_dir_all(&processing_spendables_dir).unwrap();
}
}
let destination_address = bitcoind_client.get_new_address().await;
let output_descriptors = &outputs.iter().map(|a| a).collect::<Vec<_>>();
- let tx_feerate =
- bitcoind_client.get_est_sat_per_1000_weight(ConfirmationTarget::Background);
+ let tx_feerate = bitcoind_client
+ .get_est_sat_per_1000_weight(ConfirmationTarget::ChannelCloseMinimum);
// We set nLockTime to the current height to discourage fee sniping.
// Occasionally randomly pick a nLockTime even further back, so
cur_height = cur_height.saturating_sub(thread_rng().gen_range(0, 100));
}
- let locktime: PackedLockTime =
- LockTime::from_height(cur_height).map_or(PackedLockTime::ZERO, |l| l.into());
+ let locktime =
+ LockTime::from_height(cur_height).map_or(LockTime::ZERO, |l| l.into());
if let Ok(spending_tx) = keys_manager.spend_spendable_outputs(
output_descriptors,