Skip to content

Commit c53048a

Browse files
authored
Merge pull request #1144 from jkczyz/2021-10-invoice-payer-scoring
Penalize failed channels
2 parents 070e22b + db05a14 commit c53048a

File tree

13 files changed

+391
-97
lines changed

13 files changed

+391
-97
lines changed

fuzz/src/full_stack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
382382
let our_id = PublicKey::from_secret_key(&Secp256k1::signing_only(), &keys_manager.get_node_secret());
383383
let network_graph = NetworkGraph::new(genesis_block(network).block_hash());
384384
let net_graph_msg_handler = Arc::new(NetGraphMsgHandler::new(network_graph, None, Arc::clone(&logger)));
385-
let scorer = Scorer::new(0);
385+
let scorer = Scorer::with_fixed_penalty(0);
386386

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

fuzz/src/router.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
248248
}]));
249249
}
250250
}
251-
let scorer = Scorer::new(0);
251+
let scorer = Scorer::with_fixed_penalty(0);
252252
for target in node_pks.iter() {
253253
let params = RouteParameters {
254254
payee: Payee::new(*target).with_route_hints(last_hops.clone()),

lightning-background-processor/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ lightning-persister = { version = "0.0.102", path = "../lightning-persister" }
1616

1717
[dev-dependencies]
1818
lightning = { version = "0.0.102", path = "../lightning", features = ["_test_utils"] }
19-
19+
lightning-invoice = { version = "0.10.0", path = "../lightning-invoice" }

lightning-background-processor/src/lib.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ impl BackgroundProcessor {
173173
Descriptor: 'static + SocketDescriptor + Send + Sync,
174174
CMH: 'static + Deref + Send + Sync,
175175
RMH: 'static + Deref + Send + Sync,
176-
EH: 'static + EventHandler + Send + Sync,
176+
EH: 'static + EventHandler + Send,
177177
CMP: 'static + Send + ChannelManagerPersister<Signer, CW, T, K, F, L>,
178178
M: 'static + Deref<Target = ChainMonitor<Signer, CF, T, F, L, P>> + Send + Sync,
179179
CM: 'static + Deref<Target = ChannelManager<Signer, CW, T, K, F, L>> + Send + Sync,
@@ -309,11 +309,14 @@ mod tests {
309309
use lightning::ln::features::InitFeatures;
310310
use lightning::ln::msgs::{ChannelMessageHandler, Init};
311311
use lightning::ln::peer_handler::{PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler};
312+
use lightning::routing::scorer::Scorer;
312313
use lightning::routing::network_graph::{NetworkGraph, NetGraphMsgHandler};
313314
use lightning::util::config::UserConfig;
314315
use lightning::util::events::{Event, MessageSendEventsProvider, MessageSendEvent};
315316
use lightning::util::ser::Writeable;
316317
use lightning::util::test_utils;
318+
use lightning_invoice::payment::{InvoicePayer, RetryAttempts};
319+
use lightning_invoice::utils::DefaultRouter;
317320
use lightning_persister::FilesystemPersister;
318321
use std::fs;
319322
use std::path::PathBuf;
@@ -619,4 +622,20 @@ mod tests {
619622

620623
assert!(bg_processor.stop().is_ok());
621624
}
625+
626+
#[test]
627+
fn test_invoice_payer() {
628+
let nodes = create_nodes(2, "test_invoice_payer".to_string());
629+
630+
// Initiate the background processors to watch each node.
631+
let data_dir = nodes[0].persister.get_data_dir();
632+
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);
633+
let network_graph = Arc::new(NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash()));
634+
let router = DefaultRouter::new(network_graph, Arc::clone(&nodes[0].logger));
635+
let scorer = Arc::new(Mutex::new(Scorer::default()));
636+
let invoice_payer = Arc::new(InvoicePayer::new(Arc::clone(&nodes[0].node), router, scorer, Arc::clone(&nodes[0].logger), |_: &_| {}, RetryAttempts(2)));
637+
let event_handler = Arc::clone(&invoice_payer);
638+
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());
639+
assert!(bg_processor.stop().is_ok());
640+
}
622641
}

0 commit comments

Comments
 (0)