From b6a4c4b3c4432fc7d0781486f8cfaf16586c9197 Mon Sep 17 00:00:00 2001 From: Valentine Wallace Date: Mon, 5 May 2025 13:09:11 -0400 Subject: [PATCH 1/2] Updated to main ish --- Cargo.lock | 224 ++++++++++++++++++++++++++++++++++++++++++---------- Cargo.toml | 39 +++++++-- src/cli.rs | 118 ++++++++++++++------------- src/main.rs | 8 +- 4 files changed, 280 insertions(+), 109 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c20c1197..54c91622 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -26,6 +26,12 @@ dependencies = [ "libc", ] +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + [[package]] name = "autocfg" version = "1.1.0" @@ -47,6 +53,16 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base58ck" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +dependencies = [ + "bitcoin-internals", + "bitcoin_hashes 0.14.0", +] + [[package]] name = "base64" version = "0.13.1" @@ -61,19 +77,23 @@ checksum = "cf9ff0bbfd639f15c74af777d81383cf53efb7c93613f6cab67c6c11e05bbf8b" [[package]] name = "bech32" -version = "0.9.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" [[package]] name = "bitcoin" -version = "0.30.2" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1945a5048598e4189e239d3f809b19bdad4845c4b2ba400d304d2dcf26d2c462" +checksum = "ce6bc65742dea50536e35ad42492b234c27904a27f0abdcbce605015cb4ea026" dependencies = [ - "bech32 0.9.1", - "bitcoin-private", - "bitcoin_hashes", + "base58ck", + "bech32 0.11.0", + "bitcoin-internals", + "bitcoin-io", + "bitcoin-units", + "bitcoin_hashes 0.14.0", + "hex-conservative", "hex_lit", "secp256k1", ] @@ -87,12 +107,33 @@ dependencies = [ "bech32 0.8.1", ] +[[package]] +name = "bitcoin-internals" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" + +[[package]] +name = "bitcoin-io" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + [[package]] name = "bitcoin-private" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" +[[package]] +name = "bitcoin-units" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" +dependencies = [ + "bitcoin-internals", +] + [[package]] name = "bitcoin_hashes" version = "0.12.0" @@ -102,6 +143,16 @@ dependencies = [ "bitcoin-private", ] +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", +] + [[package]] name = "bumpalo" version = "3.11.1" @@ -204,18 +255,46 @@ dependencies = [ "syn 1.0.107", ] +[[package]] +name = "dnssec-prover" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9e1163868b86c37d43c586af9d917e699c87f1266ebfdf356ad1003458118" +dependencies = [ + "bitcoin_hashes 0.14.0", + "hex_lit", + "tokio", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" + [[package]] name = "hermit-abi" version = "0.2.6" @@ -227,9 +306,12 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] [[package]] name = "hex_lit" @@ -289,7 +371,9 @@ dependencies = [ "lightning", "lightning-background-processor", "lightning-block-sync", + "lightning-dns-resolver", "lightning-invoice", + "lightning-macros", "lightning-net-tokio", "lightning-persister", "lightning-rapid-gossip-sync", @@ -300,62 +384,92 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.151" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] -name = "lightning" -version = "0.0.123" +name = "libm" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd92d4aa159374be430c7590e169b4a6c0fb79018f5bc4ea1bffde536384db3" +checksum = "a25169bd5913a4b437588a7e3d127cd6e90127b60e0ffbd834a38f1599e016b8" + +[[package]] +name = "lightning" +version = "0.2.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" dependencies = [ + "bech32 0.11.0", "bitcoin", - "hex-conservative", + "dnssec-prover", + "hashbrown", + "libm", + "lightning-invoice", + "lightning-macros", + "lightning-types", + "musig2", + "possiblyrandom", ] [[package]] name = "lightning-background-processor" -version = "0.0.123" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1c2c64050e37cee7c3b6b022106523784055ac3ee572d360780a1d6fe8062c" +version = "0.2.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" dependencies = [ "bitcoin", + "bitcoin-io", + "bitcoin_hashes 0.14.0", "lightning", "lightning-rapid-gossip-sync", ] [[package]] name = "lightning-block-sync" -version = "0.0.123" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e1e70fa351daccede0c366cf16320b16a3e42b05ae3c7ec9c0df6b5d3a3e18" +version = "0.2.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" dependencies = [ "bitcoin", "chunked_transfer", - "hex-conservative", "lightning", "serde_json", "tokio", ] +[[package]] +name = "lightning-dns-resolver" +version = "0.3.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" +dependencies = [ + "dnssec-prover", + "lightning", + "lightning-types", + "tokio", +] + [[package]] name = "lightning-invoice" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d07d01cf197bf2184b929b7dc94aa70d935aac6df896c256a3a9475b7e9d40" +version = "0.34.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" dependencies = [ - "bech32 0.9.1", + "bech32 0.11.0", "bitcoin", - "lightning", - "secp256k1", + "lightning-types", +] + +[[package]] +name = "lightning-macros" +version = "0.2.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.47", ] [[package]] name = "lightning-net-tokio" -version = "0.0.123" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e6a4d49c50a1344916d080dc8c012ce3a778cdd45de8def75350b2b40fe018" +version = "0.2.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" dependencies = [ "bitcoin", "lightning", @@ -364,9 +478,8 @@ dependencies = [ [[package]] name = "lightning-persister" -version = "0.0.123" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8dd33971815fa074b05678e09a6d4b15c78225ea34d66ed4f17c35a53467a9" +version = "0.2.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" dependencies = [ "bitcoin", "lightning", @@ -375,14 +488,23 @@ dependencies = [ [[package]] name = "lightning-rapid-gossip-sync" -version = "0.0.123" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d861b0f0cd5f8fe8c63760023c4fd4fd32c384881b41780b62ced2a8a619f91" +version = "0.2.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" dependencies = [ "bitcoin", + "bitcoin-io", + "bitcoin_hashes 0.14.0", "lightning", ] +[[package]] +name = "lightning-types" +version = "0.3.0+git" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" +dependencies = [ + "bitcoin", +] + [[package]] name = "link-cplusplus" version = "1.0.8" @@ -427,6 +549,14 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "musig2" +version = "0.1.0" +source = "git+https://github.com/arik-so/rust-musig2?rev=6f95a05718cbb44d8fe3fa6021aea8117aa38d50#6f95a05718cbb44d8fe3fa6021aea8117aa38d50" +dependencies = [ + "bitcoin", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -477,6 +607,14 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +[[package]] +name = "possiblyrandom" +version = "0.2.0" +source = "git+https://github.com/lightningdevkit/rust-lightning?rev=f9b8d630c579d76ec85e283bdd0fd0c9408a7474#f9b8d630c579d76ec85e283bdd0fd0c9408a7474" +dependencies = [ + "getrandom", +] + [[package]] name = "proc-macro2" version = "1.0.75" @@ -552,19 +690,19 @@ checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "secp256k1" -version = "0.27.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.12.0", "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.8.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ "cc", ] diff --git a/Cargo.toml b/Cargo.toml index 20ebddb9..3e43af5a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,14 +8,37 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -lightning = { version = "0.1.0", features = ["dnssec"] } -lightning-block-sync = { version = "0.1.0", features = [ "rpc-client", "tokio" ] } -lightning-dns-resolver = { version = "0.2.0" } -lightning-invoice = { version = "0.33.0" } -lightning-net-tokio = { version = "0.1.0" } -lightning-persister = { version = "0.1.0" } -lightning-background-processor = { version = "0.1.0", features = [ "futures" ] } -lightning-rapid-gossip-sync = { version = "0.1.0" } + +lightning = { git = "https://github.com/lightningdevkit/rust-lightning", rev ="f9b8d630c579d76ec85e283bdd0fd0c9408a7474", features = ["dnssec"] } +lightning-invoice = { git = "https://github.com/lightningdevkit/rust-lightning", rev ="f9b8d630c579d76ec85e283bdd0fd0c9408a7474", features = ["std"] } +lightning-net-tokio = { git = "https://github.com/lightningdevkit/rust-lightning", rev ="f9b8d630c579d76ec85e283bdd0fd0c9408a7474" } +lightning-persister = { git = "https://github.com/lightningdevkit/rust-lightning", rev ="f9b8d630c579d76ec85e283bdd0fd0c9408a7474" } +lightning-background-processor = { git = "https://github.com/lightningdevkit/rust-lightning", rev ="f9b8d630c579d76ec85e283bdd0fd0c9408a7474", features = ["futures"] } +lightning-rapid-gossip-sync = { git = "https://github.com/lightningdevkit/rust-lightning", rev = "f9b8d630c579d76ec85e283bdd0fd0c9408a7474" } +lightning-block-sync = { git = "https://github.com/lightningdevkit/rust-lightning", rev = "f9b8d630c579d76ec85e283bdd0fd0c9408a7474", features = ["rpc-client", "tokio"] } +lightning-macros = { git = "https://github.com/lightningdevkit/rust-lightning", rev = "f9b8d630c579d76ec85e283bdd0fd0c9408a7474" } +lightning-dns-resolver = { git = "https://github.com/lightningdevkit/rust-lightning", rev = "f9b8d630c579d76ec85e283bdd0fd0c9408a7474" } + + + +# lightning = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["std"] } +# lightning-invoice = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["std"] } +# lightning-net-tokio = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } +# lightning-persister = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } +# lightning-background-processor = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["futures"] } +# lightning-rapid-gossip-sync = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } +# lightning-block-sync = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["rpc-client", "tokio"] } +# lightning-macros = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } +# lightning-dns-resolver = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } + +# lightning = { version = "0.1.0", features = ["dnssec"] } +# lightning-block-sync = { version = "0.1.0", features = [ "rpc-client", "tokio" ] } +# lightning-dns-resolver = { version = "0.2.0" } +# lightning-invoice = { version = "0.33.0" } +# lightning-net-tokio = { version = "0.1.0" } +# lightning-persister = { version = "0.1.0" } +# lightning-background-processor = { version = "0.1.0", features = [ "futures" ] } +# lightning-rapid-gossip-sync = { version = "0.1.0" } base64 = "0.13.0" bitcoin = "0.32" diff --git a/src/cli.rs b/src/cli.rs index 528cc73f..05e8ad58 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -9,8 +9,8 @@ use bitcoin::hashes::Hash; use bitcoin::network::Network; use bitcoin::secp256k1::PublicKey; use lightning::chain::channelmonitor::Balance; -use lightning::ln::bolt11_payment::payment_parameters_from_invoice; -use lightning::ln::bolt11_payment::payment_parameters_from_variable_amount_invoice; +// use lightning::ln::bolt11_payment::payment_parameters_from_invoice; +// use lightning::ln::bolt11_payment::payment_parameters_from_variable_amount_invoice; use lightning::ln::channelmanager::{ Bolt11InvoiceParameters, PaymentId, RecipientOnionFields, Retry, }; @@ -20,7 +20,7 @@ use lightning::offers::offer::{self, Offer}; use lightning::onion_message::dns_resolution::HumanReadableName; use lightning::onion_message::messenger::Destination; use lightning::routing::gossip::NodeId; -use lightning::routing::router::{PaymentParameters, RouteParameters}; +use lightning::routing::router::{PaymentParameters, RouteParameters, RouteParametersConfig}; use lightning::sign::{EntropySource, KeysManager}; use lightning::types::payment::{PaymentHash, PaymentPreimage}; use lightning::util::config::{ChannelHandshakeConfig, ChannelHandshakeLimits, UserConfig}; @@ -235,7 +235,7 @@ pub(crate) fn poll_for_user_input( let retry = Retry::Timeout(Duration::from_secs(10)); let amt = Some(amt_msat); let pay = channel_manager - .pay_for_offer(&offer, None, amt, None, payment_id, retry, None); + .pay_for_offer(&offer, None, amt, None, payment_id, retry, RouteParametersConfig::default()); if pay.is_ok() { println!("Payment in flight"); } else { @@ -299,7 +299,7 @@ pub(crate) fn poll_for_user_input( let pay = |a, b, c, d, e, f| { channel_manager.pay_for_offer_from_human_readable_name(a, b, c, d, e, f) }; - let pay = pay(hrn, amt_msat, payment_id, retry, None, dns_resolvers); + let pay = pay(hrn, amt_msat, payment_id, retry, RouteParametersConfig::default(), dns_resolvers); if pay.is_ok() { println!("Payment in flight"); } else { @@ -829,36 +829,36 @@ fn send_payment( ) { let payment_id = PaymentId((*invoice.payment_hash()).to_byte_array()); let payment_secret = Some(*invoice.payment_secret()); - let zero_amt_invoice = - invoice.amount_milli_satoshis().is_none() || invoice.amount_milli_satoshis() == Some(0); - let pay_params_opt = if zero_amt_invoice { - if let Some(amt_msat) = required_amount_msat { - payment_parameters_from_variable_amount_invoice(invoice, amt_msat) - } else { - println!("Need an amount for the given 0-value invoice"); - print!("> "); - return; - } - } else { - if required_amount_msat.is_some() && invoice.amount_milli_satoshis() != required_amount_msat - { - println!( - "Amount didn't match invoice value of {}msat", - invoice.amount_milli_satoshis().unwrap_or(0) - ); - print!("> "); - return; - } - payment_parameters_from_invoice(invoice) - }; - let (payment_hash, recipient_onion, route_params) = match pay_params_opt { - Ok(res) => res, - Err(e) => { - println!("Failed to parse invoice: {:?}", e); - print!("> "); - return; - }, - }; + // let zero_amt_invoice = + // invoice.amount_milli_satoshis().is_none() || invoice.amount_milli_satoshis() == Some(0); + // let pay_params_opt = if zero_amt_invoice { + // if let Some(amt_msat) = required_amount_msat { + // payment_parameters_from_variable_amount_invoice(invoice, amt_msat) + // } else { + // println!("Need an amount for the given 0-value invoice"); + // print!("> "); + // return; + // } + // } else { + // if required_amount_msat.is_some() && invoice.amount_milli_satoshis() != required_amount_msat + // { + // println!( + // "Amount didn't match invoice value of {}msat", + // invoice.amount_milli_satoshis().unwrap_or(0) + // ); + // print!("> "); + // return; + // } + // payment_parameters_from_invoice(invoice) + // }; + // let (payment_hash, recipient_onion, route_params) = match pay_params_opt { + // Ok(res) => res, + // Err(e) => { + // println!("Failed to parse invoice: {:?}", e); + // print!("> "); + // return; + // }, + // }; outbound_payments.payments.insert( payment_id, PaymentInfo { @@ -870,26 +870,34 @@ fn send_payment( ); fs_store.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.encode()).unwrap(); - match channel_manager.send_payment( - payment_hash, - recipient_onion, - payment_id, - route_params, - Retry::Timeout(Duration::from_secs(10)), - ) { - Ok(_) => { - let payee_pubkey = invoice.recover_payee_pub_key(); - let amt_msat = invoice.amount_milli_satoshis().unwrap(); - println!("EVENT: initiated sending {} msats to {}", amt_msat, payee_pubkey); - print!("> "); - }, - Err(e) => { - println!("ERROR: failed to send payment: {:?}", e); - print!("> "); - outbound_payments.payments.get_mut(&payment_id).unwrap().status = HTLCStatus::Failed; - fs_store.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.encode()).unwrap(); - }, - }; + // TODO: fix this so the amounts match + let amount_msats = invoice.amount_milli_satoshis().or(required_amount_msat); + let route_params_config = RouteParametersConfig::default(); + channel_manager.pay_for_bolt11_invoice( + invoice, payment_id, amount_msats, route_params_config, + Retry::Timeout(Duration::from_secs(10)) + ).unwrap(); + + // match channel_manager.send_payment( + // payment_hash, + // recipient_onion, + // payment_id, + // route_params, + // Retry::Timeout(Duration::from_secs(10)), + // ) { + // Ok(_) => { + // let payee_pubkey = invoice.recover_payee_pub_key(); + // let amt_msat = invoice.amount_milli_satoshis().unwrap(); + // println!("EVENT: initiated sending {} msats to {}", amt_msat, payee_pubkey); + // print!("> "); + // }, + // Err(e) => { + // println!("ERROR: failed to send payment: {:?}", e); + // print!("> "); + // outbound_payments.payments.get_mut(&payment_id).unwrap().status = HTLCStatus::Failed; + // fs_store.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.encode()).unwrap(); + // }, + // }; } fn keysend( diff --git a/src/main.rs b/src/main.rs index 370838da..f88e8134 100644 --- a/src/main.rs +++ b/src/main.rs @@ -355,6 +355,7 @@ async fn handle_ldk_events( temporary_channel_id, counterparty_node_id, user_channel_id, + None, ); if let Err(e) = res { @@ -800,7 +801,7 @@ async fn start_ldk() { ]; for (blockhash, channel_monitor) in channelmonitors.drain(..) { - let outpoint = channel_monitor.get_funding_txo().0; + let outpoint = channel_monitor.get_funding_txo(); chain_listener_channel_monitors.push(( blockhash, (channel_monitor, broadcaster.clone(), fee_estimator.clone(), logger.clone()), @@ -830,9 +831,10 @@ async fn start_ldk() { // Step 14: Give ChannelMonitors to ChainMonitor for item in chain_listener_channel_monitors.drain(..) { let channel_monitor = item.1 .0; - let funding_outpoint = item.2; + // let funding_outpoint = item.2; + let channel_id = channel_monitor.channel_id(); assert_eq!( - chain_monitor.watch_channel(funding_outpoint, channel_monitor), + chain_monitor.watch_channel(channel_id, channel_monitor), Ok(ChannelMonitorUpdateStatus::Completed) ); } From 7ae0d3e43dc9416f2a7cbf71a25b155cca6ae681 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Mon, 5 May 2025 20:41:51 +0200 Subject: [PATCH 2/2] invoice amt fixes --- Cargo.toml | 21 ----------- src/cli.rs | 100 +++++++++++++++++++++------------------------------- src/main.rs | 1 - 3 files changed, 41 insertions(+), 81 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3e43af5a..56a174e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,27 +19,6 @@ lightning-block-sync = { git = "https://github.com/lightningdevkit/rust-lightnin lightning-macros = { git = "https://github.com/lightningdevkit/rust-lightning", rev = "f9b8d630c579d76ec85e283bdd0fd0c9408a7474" } lightning-dns-resolver = { git = "https://github.com/lightningdevkit/rust-lightning", rev = "f9b8d630c579d76ec85e283bdd0fd0c9408a7474" } - - -# lightning = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["std"] } -# lightning-invoice = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["std"] } -# lightning-net-tokio = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } -# lightning-persister = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } -# lightning-background-processor = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["futures"] } -# lightning-rapid-gossip-sync = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } -# lightning-block-sync = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main", features = ["rpc-client", "tokio"] } -# lightning-macros = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } -# lightning-dns-resolver = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "main" } - -# lightning = { version = "0.1.0", features = ["dnssec"] } -# lightning-block-sync = { version = "0.1.0", features = [ "rpc-client", "tokio" ] } -# lightning-dns-resolver = { version = "0.2.0" } -# lightning-invoice = { version = "0.33.0" } -# lightning-net-tokio = { version = "0.1.0" } -# lightning-persister = { version = "0.1.0" } -# lightning-background-processor = { version = "0.1.0", features = [ "futures" ] } -# lightning-rapid-gossip-sync = { version = "0.1.0" } - base64 = "0.13.0" bitcoin = "0.32" bitcoin-bech32 = "0.12" diff --git a/src/cli.rs b/src/cli.rs index 05e8ad58..63207952 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -9,8 +9,6 @@ use bitcoin::hashes::Hash; use bitcoin::network::Network; use bitcoin::secp256k1::PublicKey; use lightning::chain::channelmonitor::Balance; -// use lightning::ln::bolt11_payment::payment_parameters_from_invoice; -// use lightning::ln::bolt11_payment::payment_parameters_from_variable_amount_invoice; use lightning::ln::channelmanager::{ Bolt11InvoiceParameters, PaymentId, RecipientOnionFields, Retry, }; @@ -829,36 +827,27 @@ fn send_payment( ) { let payment_id = PaymentId((*invoice.payment_hash()).to_byte_array()); let payment_secret = Some(*invoice.payment_secret()); - // let zero_amt_invoice = - // invoice.amount_milli_satoshis().is_none() || invoice.amount_milli_satoshis() == Some(0); - // let pay_params_opt = if zero_amt_invoice { - // if let Some(amt_msat) = required_amount_msat { - // payment_parameters_from_variable_amount_invoice(invoice, amt_msat) - // } else { - // println!("Need an amount for the given 0-value invoice"); - // print!("> "); - // return; - // } - // } else { - // if required_amount_msat.is_some() && invoice.amount_milli_satoshis() != required_amount_msat - // { - // println!( - // "Amount didn't match invoice value of {}msat", - // invoice.amount_milli_satoshis().unwrap_or(0) - // ); - // print!("> "); - // return; - // } - // payment_parameters_from_invoice(invoice) - // }; - // let (payment_hash, recipient_onion, route_params) = match pay_params_opt { - // Ok(res) => res, - // Err(e) => { - // println!("Failed to parse invoice: {:?}", e); - // print!("> "); - // return; - // }, - // }; + let zero_amt_invoice = + invoice.amount_milli_satoshis().is_none() || invoice.amount_milli_satoshis() == Some(0); + let amount_msats = if zero_amt_invoice { + if required_amount_msat.is_none() { + println!("Need an amount for the given 0-value invoice"); + print!("> "); + return; + } + required_amount_msat + } else { + if required_amount_msat.is_some() && invoice.amount_milli_satoshis() != required_amount_msat + { + println!( + "Amount didn't match invoice value of {}msat", + invoice.amount_milli_satoshis().unwrap_or(0) + ); + print!("> "); + return; + } + None + }; outbound_payments.payments.insert( payment_id, PaymentInfo { @@ -870,34 +859,27 @@ fn send_payment( ); fs_store.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.encode()).unwrap(); - // TODO: fix this so the amounts match - let amount_msats = invoice.amount_milli_satoshis().or(required_amount_msat); let route_params_config = RouteParametersConfig::default(); - channel_manager.pay_for_bolt11_invoice( - invoice, payment_id, amount_msats, route_params_config, - Retry::Timeout(Duration::from_secs(10)) - ).unwrap(); - - // match channel_manager.send_payment( - // payment_hash, - // recipient_onion, - // payment_id, - // route_params, - // Retry::Timeout(Duration::from_secs(10)), - // ) { - // Ok(_) => { - // let payee_pubkey = invoice.recover_payee_pub_key(); - // let amt_msat = invoice.amount_milli_satoshis().unwrap(); - // println!("EVENT: initiated sending {} msats to {}", amt_msat, payee_pubkey); - // print!("> "); - // }, - // Err(e) => { - // println!("ERROR: failed to send payment: {:?}", e); - // print!("> "); - // outbound_payments.payments.get_mut(&payment_id).unwrap().status = HTLCStatus::Failed; - // fs_store.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.encode()).unwrap(); - // }, - // }; + match channel_manager.pay_for_bolt11_invoice( + invoice, + payment_id, + amount_msats, + route_params_config, + Retry::Timeout(Duration::from_secs(10)), + ) { + Ok(_) => { + let payee_pubkey = invoice.recover_payee_pub_key(); + let amt_msat = invoice.amount_milli_satoshis().unwrap(); + println!("EVENT: initiated sending {} msats to {}", amt_msat, payee_pubkey); + print!("> "); + }, + Err(e) => { + println!("ERROR: failed to send payment: {:?}", e); + print!("> "); + outbound_payments.payments.get_mut(&payment_id).unwrap().status = HTLCStatus::Failed; + fs_store.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.encode()).unwrap(); + }, + }; } fn keysend( diff --git a/src/main.rs b/src/main.rs index f88e8134..9cbeb6c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -831,7 +831,6 @@ async fn start_ldk() { // Step 14: Give ChannelMonitors to ChainMonitor for item in chain_listener_channel_monitors.drain(..) { let channel_monitor = item.1 .0; - // let funding_outpoint = item.2; let channel_id = channel_monitor.channel_id(); assert_eq!( chain_monitor.watch_channel(channel_id, channel_monitor),