@@ -137,13 +137,11 @@ func (ec *eventConsumer) handleKeyGenEvent(natMsg *nats.Msg) {
137137 walletID := msg .WalletID
138138 ecdsaSession , err := ec .node .CreateKeyGenSession (mpc .SessionTypeECDSA , walletID , ec .mpcThreshold , ec .genKeyResultQueue )
139139 if err != nil {
140- logger .Error ("Failed to create ECDSA key generation session" , err , "walletID" , walletID )
141140 ec .handleKeygenSessionError (walletID , err , "Failed to create ECDSA key generation session" , natMsg )
142141 return
143142 }
144143 eddsaSession , err := ec .node .CreateKeyGenSession (mpc .SessionTypeEDDSA , walletID , ec .mpcThreshold , ec .genKeyResultQueue )
145144 if err != nil {
146- logger .Error ("Failed to create EdDSA key generation session" , err , "walletID" , walletID )
147145 ec .handleKeygenSessionError (walletID , err , "Failed to create EdDSA key generation session" , natMsg )
148146 return
149147 }
@@ -225,7 +223,11 @@ func (ec *eventConsumer) handleKeyGenEvent(natMsg *nats.Msg) {
225223 }
226224
227225 key := fmt .Sprintf (mpc .TypeGenerateWalletResultFmt , walletID )
228- if err := ec .genKeyResultQueue .Enqueue (key , payload , & messaging.EnqueueOptions {IdempotententKey : key }); err != nil {
226+ if err := ec .genKeyResultQueue .Enqueue (
227+ key ,
228+ payload ,
229+ & messaging.EnqueueOptions {IdempotententKey : composeKeygenIdempotentKey (walletID , natMsg )},
230+ ); err != nil {
229231 logger .Error ("Failed to publish key generation success message" , err )
230232 ec .handleKeygenSessionError (walletID , err , "Failed to publish key generation success message" , natMsg )
231233 return
@@ -238,14 +240,6 @@ func (ec *eventConsumer) handleKeyGenEvent(natMsg *nats.Msg) {
238240func (ec * eventConsumer ) handleKeygenSessionError (walletID string , err error , contextMsg string , natMsg * nats.Msg ) {
239241 fullErrMsg := fmt .Sprintf ("%s: %v" , contextMsg , err )
240242 errorCode := event .GetErrorCodeFromError (err )
241-
242- logger .Warn ("Keygen session error" ,
243- "walletID" , walletID ,
244- "error" , err .Error (),
245- "errorCode" , errorCode ,
246- "context" , contextMsg ,
247- )
248-
249243 keygenResult := event.KeygenResultEvent {
250244 ResultType : event .ResultTypeError ,
251245 ErrorCode : string (errorCode ),
@@ -263,7 +257,7 @@ func (ec *eventConsumer) handleKeygenSessionError(walletID string, err error, co
263257
264258 key := fmt .Sprintf (mpc .TypeGenerateWalletResultFmt , walletID )
265259 err = ec .genKeyResultQueue .Enqueue (key , keygenResultBytes , & messaging.EnqueueOptions {
266- IdempotententKey : key ,
260+ IdempotententKey : composeKeygenIdempotentKey ( walletID , natMsg ) ,
267261 })
268262 if err != nil {
269263 logger .Error ("Failed to enqueue keygen result event" , err ,
@@ -795,3 +789,14 @@ func sessionTypeFromKeyType(keyType types.KeyType) (mpc.SessionType, error) {
795789 return "" , fmt .Errorf ("unsupported key type: %v" , keyType )
796790 }
797791}
792+
793+ func composeKeygenIdempotentKey (walletID string , natMsg * nats.Msg ) string {
794+ var uniqueKey string
795+ sid := natMsg .Header .Get ("SessionID" )
796+ if sid != "" {
797+ uniqueKey = fmt .Sprintf ("%s:%s" , walletID , sid )
798+ } else {
799+ uniqueKey = walletID
800+ }
801+ return fmt .Sprintf (mpc .TypeGenerateWalletResultFmt , uniqueKey )
802+ }
0 commit comments