Add Payjoin Receiver Support (BIP 77)#746
Add Payjoin Receiver Support (BIP 77)#746Camillarhi wants to merge 1 commit intolightningdevkit:mainfrom
Conversation
|
👋 Thanks for assigning @tnull as a reviewer! |
1db2b08 to
49017bd
Compare
|
We've merged the async persistence PR you mentioned. You might want to build your draft PR on the merged commit from there on until we cut you a release. |
Thanks for letting me know. I'll build on the merged commit. |
8f6ba65 to
6499918
Compare
|
Are you stuck? Did something in our library break CI @Camillarhi |
Not stuck at all. I was just closing out some other PRs. Still working on this one, I'll let you know when it's ready. |
12a41ad to
eb97832
Compare
120b089 to
8cc2a31
Compare
5fe1a5c to
0411ada
Compare
|
Marking this as ready for review. The core receiver flow is implemented, including session persistence, PSBT handling, input contribution, mempool monitoring for payjoin transactions, and node restart recovery. Two things still pending that I'll follow up with:
Happy to get early feedback on the overall approach in the meantime. |
|
🔔 3rd Reminder Hey @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
1 similar comment
|
🔔 3rd Reminder Hey @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
Implements the receiver side of the BIP 77 Payjoin v2 protocol, allowing LDK Node users to receive payjoin payments via a payjoin directory and OHTTP relay. - Adds a `PayjoinPayment` handler exposing a `receive()` method that returns a BIP 21 URI the sender can use to initiate the payjoin flow. The full receiver state machine is implemented covering all `ReceiveSession` states: polling the directory, validating the sender's proposal, contributing inputs, finalizing the PSBT, and monitoring the mempool. - Session state is persisted via `KVStorePayjoinReceiverPersister` and survives node restarts through event log replay. Sender inputs are tracked by `OutPoint` across polling attempts to prevent replay attacks. The sender's fallback transaction is broadcast on cancellation or failure to ensure the receiver still gets paid. - Adds `PaymentKind::Payjoin` to the payment store, `PayjoinConfig` for configuring the payjoin directory and OHTTP relay via `Builder::set_payjoin_config`, and background tasks for session resumption every 15 seconds and cleanup of terminal sessions after 24 hours.
98a3bc5 to
d790d1c
Compare
|
🔔 6th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 4th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
1 similar comment
|
🔔 4th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 1st Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 7th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 5th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
1 similar comment
|
🔔 5th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 2nd Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 8th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 6th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
1 similar comment
|
🔔 6th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 3rd Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 9th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 7th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
1 similar comment
|
🔔 7th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 4th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 10th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 8th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
1 similar comment
|
🔔 8th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 5th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 11th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 9th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
1 similar comment
|
🔔 9th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
|
🔔 6th Reminder Hey @tnull @zealsham @spacebear21 @bc1cindy! This PR has been waiting for your review. |
This PR adds support for receiving payjoin payments in LDK Node. This is currently a work in progress and implements the receiver side of the payjoin protocol.
KVStorePayjoinReceiverPersisterto handle session persistencePayjoinas aPaymentKindto the payment storeNote on persistence: The payjoin library currently only supports synchronous persistence, but they're working on adding async support(payjoin/rust-payjoin#1235). This PR sets up the persistence structure (
KVStorePayjoinReceiverPersister), which will be updated to use async operations once the upstream PR is merged.This PR will partially address #177