Skip to content

Commit a1fedea

Browse files
Merge pull request #1227 from jkczyz/2021-12-probabilistic-scorer
Probabilistic channel scoring
2 parents 482a2b9 + d5db85e commit a1fedea

File tree

14 files changed

+1578
-349
lines changed

14 files changed

+1578
-349
lines changed

fuzz/src/full_stack.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use lightning::ln::msgs::DecodeError;
3939
use lightning::ln::script::ShutdownScript;
4040
use lightning::routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
4141
use lightning::routing::router::{find_route, PaymentParameters, RouteParameters};
42-
use lightning::routing::scoring::Scorer;
42+
use lightning::routing::scoring::FixedPenaltyScorer;
4343
use lightning::util::config::UserConfig;
4444
use lightning::util::errors::APIError;
4545
use lightning::util::events::Event;
@@ -393,7 +393,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
393393
let our_id = PublicKey::from_secret_key(&Secp256k1::signing_only(), &keys_manager.get_node_secret());
394394
let network_graph = Arc::new(NetworkGraph::new(genesis_block(network).block_hash()));
395395
let net_graph_msg_handler = Arc::new(NetGraphMsgHandler::new(Arc::clone(&network_graph), None, Arc::clone(&logger)));
396-
let scorer = Scorer::with_fixed_penalty(0);
396+
let scorer = FixedPenaltyScorer::with_penalty(0);
397397

398398
let peers = RefCell::new([false; 256]);
399399
let mut loss_detector = MoneyLossDetector::new(&peers, channelmanager.clone(), monitor.clone(), PeerManager::new(MessageHandler {

fuzz/src/router.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use lightning::ln::channelmanager::{ChannelDetails, ChannelCounterparty};
1717
use lightning::ln::features::InitFeatures;
1818
use lightning::ln::msgs;
1919
use lightning::routing::router::{find_route, PaymentParameters, RouteHint, RouteHintHop, RouteParameters};
20-
use lightning::routing::scoring::Scorer;
20+
use lightning::routing::scoring::FixedPenaltyScorer;
2121
use lightning::util::logger::Logger;
2222
use lightning::util::ser::Readable;
2323
use lightning::routing::network_graph::{NetworkGraph, RoutingFees};
@@ -249,7 +249,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
249249
}]));
250250
}
251251
}
252-
let scorer = Scorer::with_fixed_penalty(0);
252+
let scorer = FixedPenaltyScorer::with_penalty(0);
253253
for target in node_pks.iter() {
254254
let route_params = RouteParameters {
255255
payment_params: PaymentParameters::from_node_id(*target).with_route_hints(last_hops.clone()),

lightning-background-processor/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ mod tests {
673673
let data_dir = nodes[0].persister.get_data_dir();
674674
let persister = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
675675
let router = DefaultRouter::new(Arc::clone(&nodes[0].network_graph), Arc::clone(&nodes[0].logger));
676-
let scorer = Arc::new(Mutex::new(test_utils::TestScorer::default()));
676+
let scorer = Arc::new(Mutex::new(test_utils::TestScorer::with_penalty(0)));
677677
let invoice_payer = Arc::new(InvoicePayer::new(Arc::clone(&nodes[0].node), router, scorer, Arc::clone(&nodes[0].logger), |_: &_| {}, RetryAttempts(2)));
678678
let event_handler = Arc::clone(&invoice_payer);
679679
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());

lightning-invoice/src/payment.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
//! # }
9191
//! # impl Score for FakeScorer {
9292
//! # fn channel_penalty_msat(
93-
//! # &self, _short_channel_id: u64, _send_amt: u64, _chan_amt: Option<u64>, _source: &NodeId, _target: &NodeId
93+
//! # &self, _short_channel_id: u64, _send_amt: u64, _chan_amt: u64, _source: &NodeId, _target: &NodeId
9494
//! # ) -> u64 { 0 }
9595
//! # fn payment_path_failed(&mut self, _path: &[&RouteHop], _short_channel_id: u64) {}
9696
//! # fn payment_path_successful(&mut self, _path: &[&RouteHop]) {}
@@ -1327,7 +1327,7 @@ mod tests {
13271327

13281328
impl Score for TestScorer {
13291329
fn channel_penalty_msat(
1330-
&self, _short_channel_id: u64, _send_amt: u64, _chan_amt: Option<u64>, _source: &NodeId, _target: &NodeId
1330+
&self, _short_channel_id: u64, _send_amt: u64, _chan_amt: u64, _source: &NodeId, _target: &NodeId
13311331
) -> u64 { 0 }
13321332

13331333
fn payment_path_failed(&mut self, actual_path: &[&RouteHop], actual_short_channel_id: u64) {

lightning-invoice/src/utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ mod test {
227227
let first_hops = nodes[0].node.list_usable_channels();
228228
let network_graph = node_cfgs[0].network_graph;
229229
let logger = test_utils::TestLogger::new();
230-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
230+
let scorer = test_utils::TestScorer::with_penalty(0);
231231
let route = find_route(
232232
&nodes[0].node.get_our_node_id(), &route_params, network_graph,
233233
Some(&first_hops.iter().collect::<Vec<_>>()), &logger, &scorer,

lightning/src/ln/channelmanager.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -6901,7 +6901,7 @@ mod tests {
69016901
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
69026902
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
69036903
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
6904-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
6904+
let scorer = test_utils::TestScorer::with_penalty(0);
69056905

69066906
// To start (1), send a regular payment but don't claim it.
69076907
let expected_route = [&nodes[1]];
@@ -7006,7 +7006,7 @@ mod tests {
70067006
};
70077007
let network_graph = nodes[0].network_graph;
70087008
let first_hops = nodes[0].node.list_usable_channels();
7009-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
7009+
let scorer = test_utils::TestScorer::with_penalty(0);
70107010
let route = find_route(
70117011
&payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
70127012
nodes[0].logger, &scorer
@@ -7049,7 +7049,7 @@ mod tests {
70497049
};
70507050
let network_graph = nodes[0].network_graph;
70517051
let first_hops = nodes[0].node.list_usable_channels();
7052-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
7052+
let scorer = test_utils::TestScorer::with_penalty(0);
70537053
let route = find_route(
70547054
&payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
70557055
nodes[0].logger, &scorer
@@ -7143,7 +7143,6 @@ pub mod bench {
71437143
use ln::msgs::{ChannelMessageHandler, Init};
71447144
use routing::network_graph::NetworkGraph;
71457145
use routing::router::{PaymentParameters, get_route};
7146-
use routing::scoring::Scorer;
71477146
use util::test_utils;
71487147
use util::config::UserConfig;
71497148
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose};
@@ -7253,7 +7252,7 @@ pub mod bench {
72537252
let usable_channels = $node_a.list_usable_channels();
72547253
let payment_params = PaymentParameters::from_node_id($node_b.get_our_node_id())
72557254
.with_features(InvoiceFeatures::known());
7256-
let scorer = Scorer::with_fixed_penalty(0);
7255+
let scorer = test_utils::TestScorer::with_penalty(0);
72577256
let route = get_route(&$node_a.get_our_node_id(), &payment_params, &dummy_graph,
72587257
Some(&usable_channels.iter().map(|r| r).collect::<Vec<_>>()), 10_000, TEST_FINAL_CLTV, &logger_a, &scorer).unwrap();
72597258

lightning/src/ln/functional_test_utils.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1085,7 +1085,7 @@ macro_rules! get_route_and_payment_hash {
10851085
let payment_params = $crate::routing::router::PaymentParameters::from_node_id($recv_node.node.get_our_node_id())
10861086
.with_features($crate::ln::features::InvoiceFeatures::known())
10871087
.with_route_hints($last_hops);
1088-
let scorer = $crate::util::test_utils::TestScorer::with_fixed_penalty(0);
1088+
let scorer = $crate::util::test_utils::TestScorer::with_penalty(0);
10891089
let route = $crate::routing::router::get_route(
10901090
&$send_node.node.get_our_node_id(), &payment_params, $send_node.network_graph,
10911091
Some(&$send_node.node.list_usable_channels().iter().collect::<Vec<_>>()),
@@ -1540,7 +1540,7 @@ pub const TEST_FINAL_CLTV: u32 = 70;
15401540
pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) -> (PaymentPreimage, PaymentHash, PaymentSecret) {
15411541
let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id())
15421542
.with_features(InvoiceFeatures::known());
1543-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
1543+
let scorer = test_utils::TestScorer::with_penalty(0);
15441544
let route = get_route(
15451545
&origin_node.node.get_our_node_id(), &payment_params, &origin_node.network_graph,
15461546
Some(&origin_node.node.list_usable_channels().iter().collect::<Vec<_>>()),
@@ -1558,7 +1558,7 @@ pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
15581558
pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) {
15591559
let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id())
15601560
.with_features(InvoiceFeatures::known());
1561-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
1561+
let scorer = test_utils::TestScorer::with_penalty(0);
15621562
let route = get_route(
15631563
&origin_node.node.get_our_node_id(), &payment_params, origin_node.network_graph,
15641564
None, recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer).unwrap();

lightning/src/ln/functional_tests.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -7439,7 +7439,7 @@ fn test_check_htlc_underpaying() {
74397439
// Create some initial channels
74407440
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
74417441

7442-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
7442+
let scorer = test_utils::TestScorer::with_penalty(0);
74437443
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id()).with_features(InvoiceFeatures::known());
74447444
let route = get_route(&nodes[0].node.get_our_node_id(), &payment_params, nodes[0].network_graph, None, 10_000, TEST_FINAL_CLTV, nodes[0].logger, &scorer).unwrap();
74457445
let (_, our_payment_hash, _) = get_payment_preimage_hash!(nodes[0]);
@@ -7842,7 +7842,7 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
78427842
let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::known(), InitFeatures::known());
78437843
// Lock HTLC in both directions (using a slightly lower CLTV delay to provide timely RBF bumps)
78447844
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id()).with_features(InvoiceFeatures::known());
7845-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
7845+
let scorer = test_utils::TestScorer::with_penalty(0);
78467846
let route = get_route(&nodes[0].node.get_our_node_id(), &payment_params, &nodes[0].network_graph, None,
78477847
3_000_000, 50, nodes[0].logger, &scorer).unwrap();
78487848
let payment_preimage = send_along_route(&nodes[0], route, &[&nodes[1]], 3_000_000).0;
@@ -9379,7 +9379,7 @@ fn test_keysend_payments_to_public_node() {
93799379
final_value_msat: 10000,
93809380
final_cltv_expiry_delta: 40,
93819381
};
9382-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
9382+
let scorer = test_utils::TestScorer::with_penalty(0);
93839383
let route = find_route(&payer_pubkey, &route_params, network_graph, None, nodes[0].logger, &scorer).unwrap();
93849384

93859385
let test_preimage = PaymentPreimage([42; 32]);
@@ -9413,7 +9413,7 @@ fn test_keysend_payments_to_private_node() {
94139413
};
94149414
let network_graph = nodes[0].network_graph;
94159415
let first_hops = nodes[0].node.list_usable_channels();
9416-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
9416+
let scorer = test_utils::TestScorer::with_penalty(0);
94179417
let route = find_route(
94189418
&payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
94199419
nodes[0].logger, &scorer

lightning/src/ln/payment_tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,7 @@ fn get_ldk_payment_preimage() {
723723

724724
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id())
725725
.with_features(InvoiceFeatures::known());
726-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
726+
let scorer = test_utils::TestScorer::with_penalty(0);
727727
let route = get_route(
728728
&nodes[0].node.get_our_node_id(), &payment_params, &nodes[0].network_graph,
729729
Some(&nodes[0].node.list_usable_channels().iter().collect::<Vec<_>>()),

lightning/src/ln/shutdown_tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ fn updates_shutdown_wait() {
7676
let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
7777
let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
7878
let logger = test_utils::TestLogger::new();
79-
let scorer = test_utils::TestScorer::with_fixed_penalty(0);
79+
let scorer = test_utils::TestScorer::with_penalty(0);
8080

8181
let (payment_preimage, _, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
8282

0 commit comments

Comments
 (0)