Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit 6336409

Browse files
committed
Stop payjoin session with nodemanager
1 parent 2d35125 commit 6336409

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

mutiny-core/src/nodemanager.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,11 +1045,11 @@ impl<S: MutinyStorage> NodeManager<S> {
10451045
.unwrap();
10461046
let pj_uri = enrolled.fallback_target();
10471047
log_debug!(self.logger, "{pj_uri}");
1048-
let wallet = self.wallet.clone();
10491048
// run await payjoin task in the background as it'll keep polling the relay
1049+
let wallet = self.wallet.clone();
1050+
let stop = self.stop.clone();
10501051
utils::spawn(async move {
1051-
let wallet = wallet.clone();
1052-
let pj_txid = Self::receive_payjoin(wallet, enrolled).await.unwrap();
1052+
let pj_txid = Self::receive_payjoin(wallet, stop, enrolled).await.unwrap();
10531053
log::info!("Received payjoin txid: {}", pj_txid);
10541054
});
10551055
Some(pj_uri)
@@ -1139,19 +1139,20 @@ impl<S: MutinyStorage> NodeManager<S> {
11391139
/// Poll the payjoin relay to maintain a payjoin session and create a payjoin proposal.
11401140
pub async fn receive_payjoin(
11411141
wallet: Arc<OnChainWallet<S>>,
1142+
stop: Arc<AtomicBool>,
11421143
mut enrolled: payjoin::receive::v2::Enrolled,
11431144
) -> Result<Txid, MutinyError> {
11441145
let http_client = reqwest::Client::builder()
11451146
//.danger_accept_invalid_certs(true) ? is tls unchecked :O
11461147
.build()
11471148
.unwrap();
11481149
let proposal: payjoin::receive::v2::UncheckedProposal =
1149-
Self::poll_for_fallback_psbt(&http_client, &mut enrolled)
1150+
Self::poll_for_fallback_psbt(stop, &http_client, &mut enrolled)
11501151
.await
11511152
.unwrap();
11521153
let payjoin_proposal = wallet.process_payjoin_proposal(proposal).unwrap();
11531154

1154-
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap();
1155+
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap(); // extraction failed
11551156
let res = http_client
11561157
.post(req.url)
11571158
.body(req.body)
@@ -1170,10 +1171,14 @@ impl<S: MutinyStorage> NodeManager<S> {
11701171
}
11711172

11721173
async fn poll_for_fallback_psbt(
1174+
stop: Arc<AtomicBool>,
11731175
client: &reqwest::Client,
11741176
enroller: &mut payjoin::receive::v2::Enrolled,
11751177
) -> Result<payjoin::receive::v2::UncheckedProposal, ()> {
11761178
loop {
1179+
if stop.load(Ordering::Relaxed) {
1180+
return Err(()); // stopped
1181+
}
11771182
let (req, context) = enroller.extract_req().unwrap();
11781183
let ohttp_response = client.post(req.url).body(req.body).send().await.unwrap();
11791184
let ohttp_response = ohttp_response.bytes().await.unwrap();

0 commit comments

Comments
 (0)