Emit TssKeygenMetric event before RotateVault events (Cosmetic)

In Block 5336940 (as an example), the "tss_keygen" event for the new pubkey .3u4l (with the "median_duration_ms") is emitted immediately after a "set_tss_pool" event.

For the last vault in Block 5336943, by contrast, there's a "set_tss_pool", then RotateVault's "InactiveVault" and "ActiveVault" events, then belatedly the "tss_keygen" event for the last of the vaults (pubkey .l0ta) which was needed to carry out the RotateVault.

I thus propose that the two chunks of code in handler_tss.go be swapped, to more intuitively carry out RotateVault only after all "tss_keygen" events for its necessary keygens have been emitted.

			if len(initVaults) == len(keygenBlock.Keygens) {
				for _, v := range initVaults {
					v.UpdateStatus(ActiveVault, common.BlockHeight(ctx))
					if err := h.mgr.Keeper().SetVault(ctx, v); err != nil {
						return nil, fmt.Errorf("fail to save vault: %w", err)
					}
					if err := h.mgr.NetworkMgr().RotateVault(ctx, v); err != nil {
						return nil, fmt.Errorf("fail to rotate vault: %w", err)
					}
				}
			} else {
				ctx.Logger().Info("not enough keygen yet", "expecting", len(keygenBlock.Keygens), "current", len(initVaults))
			}
			metric, err := h.mgr.Keeper().GetTssKeygenMetric(ctx, msg.PoolPubKey)
			if err != nil {
				ctx.Logger().Error("fail to get keygen metric", "error", err)
			} else {
				var total int64
				for _, item := range metric.NodeTssTimes {
					total += item.TssTime
				}
				evt := NewEventTssKeygenMetric(metric.PubKey, metric.GetMedianTime())
				if err := h.mgr.EventMgr().EmitEvent(ctx, evt); err != nil {
					ctx.Logger().Error("fail to emit tss metric event", "error", err)
				}
			}
Assignee Loading
Time tracking Loading