@@ -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 ) ]
4040pub 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