Skip to content

Commit c0425dd

Browse files
committed
Initial implementation of LdkLite
1 parent 6a4770a commit c0425dd

File tree

3 files changed

+1238
-0
lines changed

3 files changed

+1238
-0
lines changed

src/io.rs

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
use crate::error::LdkLiteError as Error;
2+
3+
use crate::{FilesystemLogger, LdkLiteConfig, NetworkGraph, PeerInfo, Scorer};
4+
5+
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringParameters};
6+
use lightning::util::ser::ReadableArgs;
7+
8+
use bitcoin::secp256k1::PublicKey;
9+
10+
use rand::{thread_rng, RngCore};
11+
12+
use std::collections::HashMap;
13+
use std::convert::TryFrom;
14+
use std::fs;
15+
use std::io::{BufRead, BufReader, Write};
16+
use std::net::SocketAddr;
17+
use std::sync::Arc;
18+
19+
pub(crate) fn read_or_generate_seed_file(config: Arc<LdkLiteConfig>) -> Result<[u8; 32], Error> {
20+
let keys_seed_path = format!("{}/keys_seed", config.storage_dir_path);
21+
let keys_seed = if let Ok(seed) = fs::read(keys_seed_path.clone()) {
22+
assert_eq!(seed.len(), 32);
23+
let mut key = [0; 32];
24+
key.copy_from_slice(&seed);
25+
key
26+
} else {
27+
let mut key = [0; 32];
28+
thread_rng().fill_bytes(&mut key);
29+
30+
let mut f = fs::File::create(keys_seed_path.clone()).map_err(|e| Error::StdIo(e))?;
31+
f.write_all(&key).expect("Failed to write node keys seed to disk");
32+
f.sync_all().expect("Failed to sync node keys seed to disk");
33+
key
34+
};
35+
36+
Ok(keys_seed)
37+
}
38+
39+
pub(crate) fn read_network_graph(
40+
config: Arc<LdkLiteConfig>, logger: Arc<FilesystemLogger>,
41+
) -> Result<NetworkGraph, Error> {
42+
let ldk_data_dir = format!("{}/ldk", &config.storage_dir_path.clone());
43+
let network_graph_path = format!("{}/network_graph", ldk_data_dir.clone());
44+
45+
if let Ok(file) = fs::File::open(network_graph_path) {
46+
if let Ok(graph) = NetworkGraph::read(&mut BufReader::new(file), Arc::clone(&logger)) {
47+
return Ok(graph);
48+
}
49+
}
50+
51+
let genesis_hash =
52+
bitcoin::blockdata::constants::genesis_block(config.network).header.block_hash();
53+
Ok(NetworkGraph::new(genesis_hash, logger))
54+
}
55+
56+
pub(crate) fn read_scorer(
57+
config: Arc<LdkLiteConfig>, network_graph: Arc<NetworkGraph>, logger: Arc<FilesystemLogger>,
58+
) -> Scorer {
59+
let ldk_data_dir = format!("{}/ldk", &config.storage_dir_path.clone());
60+
let scorer_path = format!("{}/scorer", ldk_data_dir.clone());
61+
62+
let params = ProbabilisticScoringParameters::default();
63+
if let Ok(file) = fs::File::open(scorer_path) {
64+
let args = (params.clone(), Arc::clone(&network_graph), Arc::clone(&logger));
65+
if let Ok(scorer) = ProbabilisticScorer::read(&mut BufReader::new(file), args) {
66+
return scorer;
67+
}
68+
}
69+
ProbabilisticScorer::new(params, network_graph, logger)
70+
}

0 commit comments

Comments
 (0)