Skip to content

Commit 0891a5b

Browse files
authored
Don't pause between long polls (payjoin#436)
For 1. simplicity of implementation, 2. consistency, and 3. UX responsiveness don't pause between long polls. This actually has negligible effect on privacy compared to what the change commit suggests as Yuval Kogman <[email protected]> comments: > For a given subdirectory ID, the amount of time in between requests that > the directory sees before this change was 5 seconds + R_i, where R is the > round trip latency to the relay and i indexes { Alice, Bob or Carol }. > The directory will is able to measure R_i indirectly before this change, and > almost directly after it, thereby potentially identifying who is the receiver and > who is the sender, since those roles are distinguishable based on the latency > patterns of a pair of potentially related (i.e. temporally close but satisfying > the ordering constraints of the BIP 77 messaging patterns). In other words > R_i is potentially identifying metadata that leaks for each subdirectory, and > by correlating different subdirectories (for which differences in this noisy > measurement are helpful), the directory could still heuristically identify the > parties involved, or at least learn some information or constraints about them > with the same difficulty both before and after this change. In other words > R_i is potentially identifying metadata that leaks for each subdirectory, and > by correlating different subdirectories (for which differences in this noisy > measurement are helpful), the directory could still heuristically identify the > parties involved, or at least learn some information or constraints about them > with the same difficulty both before and after this change.
2 parents f5ca610 + 6bf3ee1 commit 0891a5b

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

payjoin-cli/src/app/v2.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,6 @@ impl App {
206206
Ok(Some(psbt)) => return Ok(psbt),
207207
Ok(None) => {
208208
println!("No response yet.");
209-
tokio::time::sleep(std::time::Duration::from_secs(5)).await;
210209
}
211210
Err(re) => {
212211
println!("{}", re);
@@ -245,9 +244,8 @@ impl App {
245244
.process_res(ohttp_response.bytes().await?.to_vec().as_slice(), context)
246245
.map_err(|_| anyhow!("GET fallback failed"))?;
247246
log::debug!("got response");
248-
match proposal {
249-
Some(proposal) => break Ok(proposal),
250-
None => std::thread::sleep(std::time::Duration::from_secs(5)),
247+
if let Some(proposal) = proposal {
248+
break Ok(proposal);
251249
}
252250
}
253251
}

0 commit comments

Comments
 (0)