@@ -124,27 +124,27 @@ func (ec *eventConsumer) handleKeyGenEvent(natMsg *nats.Msg) {
124124 var msg types.GenerateKeyMessage
125125 if err := json .Unmarshal (raw , & msg ); err != nil {
126126 logger .Error ("Failed to unmarshal keygen message" , err )
127- ec .handleKeygenSessionError (msg .WalletID , err , "Failed to unmarshal keygen message" )
127+ ec .handleKeygenSessionError (msg .WalletID , err , "Failed to unmarshal keygen message" , natMsg )
128128 return
129129 }
130130
131131 if err := ec .identityStore .VerifyInitiatorMessage (& msg ); err != nil {
132132 logger .Error ("Failed to verify initiator message" , err )
133- ec .handleKeygenSessionError (msg .WalletID , err , "Failed to verify initiator message" )
133+ ec .handleKeygenSessionError (msg .WalletID , err , "Failed to verify initiator message" , natMsg )
134134 return
135135 }
136136
137137 walletID := msg .WalletID
138138 ecdsaSession , err := ec .node .CreateKeyGenSession (mpc .SessionTypeECDSA , walletID , ec .mpcThreshold , ec .genKeyResultQueue )
139139 if err != nil {
140140 logger .Error ("Failed to create ECDSA key generation session" , err , "walletID" , walletID )
141- ec .handleKeygenSessionError (walletID , err , "Failed to create ECDSA key generation session" )
141+ ec .handleKeygenSessionError (walletID , err , "Failed to create ECDSA key generation session" , natMsg )
142142 return
143143 }
144144 eddsaSession , err := ec .node .CreateKeyGenSession (mpc .SessionTypeEDDSA , walletID , ec .mpcThreshold , ec .genKeyResultQueue )
145145 if err != nil {
146146 logger .Error ("Failed to create EdDSA key generation session" , err , "walletID" , walletID )
147- ec .handleKeygenSessionError (walletID , err , "Failed to create EdDSA key generation session" )
147+ ec .handleKeygenSessionError (walletID , err , "Failed to create EdDSA key generation session" , natMsg )
148148 return
149149 }
150150 ecdsaSession .Init ()
@@ -167,8 +167,7 @@ func (ec *eventConsumer) handleKeyGenEvent(natMsg *nats.Msg) {
167167 successEvent .ECDSAPubKey = ecdsaSession .GetPubKeyResult ()
168168 case err := <- ecdsaSession .ErrChan ():
169169 logger .Error ("ECDSA keygen session error" , err )
170- ec .handleKeygenSessionError (walletID , err , "ECDSA keygen session error" )
171- errorChan <- err
170+ ec .handleKeygenSessionError (walletID , err , "ECDSA keygen session error" , natMsg )
172171 doneEcdsa ()
173172 }
174173 }()
@@ -179,8 +178,7 @@ func (ec *eventConsumer) handleKeyGenEvent(natMsg *nats.Msg) {
179178 successEvent .EDDSAPubKey = eddsaSession .GetPubKeyResult ()
180179 case err := <- eddsaSession .ErrChan ():
181180 logger .Error ("EdDSA keygen session error" , err )
182- ec .handleKeygenSessionError (walletID , err , "EdDSA keygen session error" )
183- errorChan <- err
181+ ec .handleKeygenSessionError (walletID , err , "EdDSA keygen session error" , natMsg )
184182 doneEddsa ()
185183 }
186184 }()
@@ -213,28 +211,29 @@ func (ec *eventConsumer) handleKeyGenEvent(natMsg *nats.Msg) {
213211 case <- baseCtx .Done ():
214212 // timeout occurred
215213 logger .Warn ("Key generation timed out" , "walletID" , walletID , "timeout" , KeyGenTimeOut )
216- ec .handleKeygenSessionError (walletID , fmt .Errorf ("keygen session timed out after %v" , KeyGenTimeOut ), "Key generation timed out" )
214+ ec .handleKeygenSessionError (walletID , fmt .Errorf ("keygen session timed out after %v" , KeyGenTimeOut ), "Key generation timed out" , natMsg )
217215 return
218216 }
219217
220218 payload , err := json .Marshal (successEvent )
221219 if err != nil {
222220 logger .Error ("Failed to marshal keygen success event" , err )
223- ec .handleKeygenSessionError (walletID , err , "Failed to marshal keygen success event" )
221+ ec .handleKeygenSessionError (walletID , err , "Failed to marshal keygen success event" , natMsg )
224222 return
225223 }
226224
227225 key := fmt .Sprintf (mpc .TypeGenerateWalletResultFmt , walletID )
228226 if err := ec .genKeyResultQueue .Enqueue (key , payload , & messaging.EnqueueOptions {IdempotententKey : key }); err != nil {
229227 logger .Error ("Failed to publish key generation success message" , err )
230- ec .handleKeygenSessionError (walletID , err , "Failed to publish key generation success message" )
228+ ec .handleKeygenSessionError (walletID , err , "Failed to publish key generation success message" , natMsg )
231229 return
232230 }
231+ ec .sendReplyToRemoveMsg (natMsg )
233232 logger .Info ("[COMPLETED KEY GEN] Key generation completed successfully" , "walletID" , walletID )
234233}
235234
236235// handleKeygenSessionError handles errors that occur during key generation
237- func (ec * eventConsumer ) handleKeygenSessionError (walletID string , err error , contextMsg string ) {
236+ func (ec * eventConsumer ) handleKeygenSessionError (walletID string , err error , contextMsg string , natMsg * nats. Msg ) {
238237 fullErrMsg := fmt .Sprintf ("%s: %v" , contextMsg , err )
239238 errorCode := event .GetErrorCodeFromError (err )
240239
@@ -270,6 +269,7 @@ func (ec *eventConsumer) handleKeygenSessionError(walletID string, err error, co
270269 "payload" , string (keygenResultBytes ),
271270 )
272271 }
272+ ec .sendReplyToRemoveMsg (natMsg )
273273}
274274
275275func (ec * eventConsumer ) startKeyGenEventWorker () {
@@ -368,6 +368,7 @@ func (ec *eventConsumer) consumeTxSigningEvent() error {
368368 msg .NetworkInternalCode ,
369369 err ,
370370 "Failed to create signing session" ,
371+ natMsg ,
371372 )
372373 return
373374 }
@@ -386,6 +387,7 @@ func (ec *eventConsumer) consumeTxSigningEvent() error {
386387 msg .NetworkInternalCode ,
387388 err ,
388389 "Failed to init signing session" ,
390+ natMsg ,
389391 )
390392 return
391393 }
@@ -407,6 +409,7 @@ func (ec *eventConsumer) consumeTxSigningEvent() error {
407409 msg .NetworkInternalCode ,
408410 err ,
409411 "Failed to sign tx" ,
412+ natMsg ,
410413 )
411414 return
412415 }
@@ -426,14 +429,7 @@ func (ec *eventConsumer) consumeTxSigningEvent() error {
426429
427430 onSuccess := func (data []byte ) {
428431 done ()
429- if natMsg .Reply != "" {
430- err = ec .pubsub .Publish (natMsg .Reply , data )
431- if err != nil {
432- logger .Error ("Failed to publish reply" , err )
433- } else {
434- logger .Info ("Reply to the original message" , "reply" , natMsg .Reply )
435- }
436- }
432+ ec .sendReplyToRemoveMsg (natMsg )
437433 }
438434 go session .Sign (onSuccess )
439435 })
@@ -445,7 +441,7 @@ func (ec *eventConsumer) consumeTxSigningEvent() error {
445441
446442 return nil
447443}
448- func (ec * eventConsumer ) handleSigningSessionError (walletID , txID , networkInternalCode string , err error , contextMsg string ) {
444+ func (ec * eventConsumer ) handleSigningSessionError (walletID , txID , networkInternalCode string , err error , contextMsg string , natMsg * nats. Msg ) {
449445 fullErrMsg := fmt .Sprintf ("%s: %v" , contextMsg , err )
450446 errorCode := event .GetErrorCodeFromError (err )
451447
@@ -475,7 +471,6 @@ func (ec *eventConsumer) handleSigningSessionError(walletID, txID, networkIntern
475471 )
476472 return
477473 }
478-
479474 err = ec .signingResultQueue .Enqueue (event .SigningResultCompleteTopic , signingResultBytes , & messaging.EnqueueOptions {
480475 IdempotententKey : txID ,
481476 })
@@ -486,7 +481,24 @@ func (ec *eventConsumer) handleSigningSessionError(walletID, txID, networkIntern
486481 "payload" , string (signingResultBytes ),
487482 )
488483 }
484+ ec .sendReplyToRemoveMsg (natMsg )
489485}
486+
487+ func (ec * eventConsumer ) sendReplyToRemoveMsg (natMsg * nats.Msg ) {
488+ msg := natMsg .Data
489+
490+ if natMsg .Reply == "" {
491+ logger .Warn ("No reply inbox specified for sign success message" , "msg" , string (msg ))
492+ return
493+ }
494+
495+ err := ec .pubsub .Publish (natMsg .Reply , msg )
496+ if err != nil {
497+ logger .Error ("Failed to reply message" , err , "reply" , natMsg .Reply )
498+ return
499+ }
500+ }
501+
490502func (ec * eventConsumer ) consumeReshareEvent () error {
491503 sub , err := ec .pubsub .Subscribe (MPCReshareEvent , func (natMsg * nats.Msg ) {
492504 var msg types.ResharingMessage
0 commit comments