Skip to content

Commit a6f3ee9

Browse files
committed
joinstr: initiator role must do a dummy join
1 parent 674c69d commit a6f3ee9

File tree

1 file changed

+16
-2
lines changed
  • rust/joinstr/src/joinstr

1 file changed

+16
-2
lines changed

rust/joinstr/src/joinstr/mod.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub struct Joinstr<'a> {
3636
pub inner: Arc<Mutex<JoinstrInner<'a>>>,
3737
}
3838

39-
#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)]
39+
#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
4040
pub enum Role {
4141
#[default]
4242
Unknown,
@@ -523,15 +523,29 @@ impl Joinstr<'_> {
523523
} else {
524524
return Err(Error::NotYetImplemented);
525525
};
526+
let pool_pubkey = inner.pool_as_ref()?.public_key;
527+
let role = inner.role;
528+
let relay = inner.client.get_relay().ok_or(Error::RelaysMissing)?;
526529
drop(inner);
527530

528531
let mut peers = HashSet::<PublicKey>::new();
529532
let mut coinjoin = CoinJoin::<crate::electrum::Client>::new(payload.denomination, None)
530533
.min_peer(payload.peers)
531534
.fee(fee as usize);
532535

533-
let mut backoff = Backoff::new_us(WAIT);
536+
if role == Role::Initiator {
537+
// send a dummy join request
538+
let mut dummy_client = NostrClient::new("dummy")
539+
.keys(Keys::generate())?
540+
.relay(relay)?;
541+
dummy_client.connect_nostr()?;
534542

543+
let dummy_response_key = Keys::generate().public_key();
544+
dummy_client
545+
.send_pool_message(&pool_pubkey, PoolMessage::Join(Some(dummy_response_key)))?;
546+
}
547+
548+
let mut backoff = Backoff::new_us(WAIT);
535549
// register peers
536550
while (now() < expired) && !(start_early && peers.len() >= payload.peers) {
537551
let mut inner = self.inner.lock().expect("poisoned");

0 commit comments

Comments
 (0)