Skip to content

Commit 2315621

Browse files
committed
#69 fix coin conversion for special denoms such as om
Signed-off-by: Long Zhang <gluckzhang@gmail.com>
1 parent 691481d commit 2315621

4 files changed

Lines changed: 19 additions & 31 deletions

File tree

td2/alert.go

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,10 +1006,12 @@ func evaluateUnclaimedRewardsAlert(cc *ChainConfig) (bool, bool) {
10061006
return alert, resolved
10071007
}
10081008

1009+
convertedToDisplay := false
10091010
if cc.denomMetadata != nil {
10101011
convertedCoins, err := utils.ConvertDecCoinToDisplayUnit(nativeCoins, *cc.denomMetadata)
10111012
if err == nil {
10121013
nativeCoins = *convertedCoins
1014+
convertedToDisplay = true
10131015
} else {
10141016
l(slog.LevelDebug, fmt.Errorf("cannot convert rewards/commission to display unit for %s, err: %w", cc.name, err))
10151017
}
@@ -1024,26 +1026,17 @@ func evaluateUnclaimedRewardsAlert(cc *ChainConfig) (bool, bool) {
10241026
return alert, resolved
10251027
}
10261028

1027-
if err := github_com_cosmos_cosmos_sdk_types.ValidateDenom(targetDenom); err != nil {
1028-
fallback := ""
1029-
if len(nativeCoins) > 0 {
1030-
if errFallback := github_com_cosmos_cosmos_sdk_types.ValidateDenom(nativeCoins[0].Denom); errFallback == nil {
1031-
fallback = nativeCoins[0].Denom
1032-
}
1033-
}
1034-
if fallback == "" {
1035-
l(slog.LevelError, fmt.Errorf("invalid target denom %q for %s: %w", targetDenom, cc.name, err))
1036-
return alert, resolved
1037-
}
1038-
l(slog.LevelDebug, fmt.Errorf("invalid target denom %q for %s: %w; falling back to %q", targetDenom, cc.name, err, fallback))
1039-
targetDenom = fallback
1029+
// coinPrice is for the chain display token. If metadata exists but conversion to display
1030+
// failed, the amount may still be in base units (e.g. uom), which would misprice by 10^exp.
1031+
// Skip this alert evaluation rather than raising a false amount-based alert.
1032+
if cc.denomMetadata != nil && !convertedToDisplay {
1033+
l(slog.LevelDebug, fmt.Errorf("skipping unclaimed rewards pricing for %s because rewards are not confirmed in display units", cc.name))
1034+
return alert, resolved
10401035
}
10411036

1042-
totalRewards := github_com_cosmos_cosmos_sdk_types.NewDecCoinFromDec(targetDenom, totalAmount)
1043-
10441037
coinPrice, err := td.coinMarketCapClient.GetPrice(td.ctx, cc.Slug)
1045-
if err == nil {
1046-
totalRewardsConverted := totalRewards.Amount.MustFloat64() * coinPrice.Price
1038+
if err == nil && convertedToDisplay {
1039+
totalRewardsConverted := totalAmount.MustFloat64() * coinPrice.Price
10471040
threshold := floatVal(cc.Alerts.UnclaimedRewardsThreshold)
10481041

10491042
alertID := fmt.Sprintf("UnclaimedRewards_%s", cc.ValAddress)

td2/run.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func Run(configFile, stateFile, chainConfigDirectory string, password *string, d
6767

6868
if td.EnableDash {
6969
go dash.Serve(td.Listen, td.updateChan, td.logChan, td.HideLogs, devMode)
70-
l(slog.LevelInfo, "starting dashboard on", td.Listen)
70+
l(slog.LevelInfo, "starting dashboard on ", td.Listen)
7171
} else {
7272
go func() {
7373
for {
@@ -147,7 +147,7 @@ func saveOnExit(stateFile string, saved chan any) {
147147
defer close(saved)
148148
slog.Info("saving state")
149149
//#nosec -- variable specified on command line
150-
f, e := os.OpenFile(stateFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0600)
150+
f, e := os.OpenFile(stateFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o600)
151151
if e != nil {
152152
slog.Error("failed to open state file for writing", "err", e)
153153
return

td2/utils/price-conversion.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -239,10 +239,6 @@ func ConvertDecCoinToDisplayUnit(coins []github_com_cosmos_cosmos_sdk_types.DecC
239239
} else {
240240
displayDenom = metadata.Display
241241
}
242-
if err := github_com_cosmos_cosmos_sdk_types.ValidateDenom(displayDenom); err != nil {
243-
return nil, fmt.Errorf("invalid display denom %q for base %q: %w", displayDenom, metadata.Base, err)
244-
}
245-
246242
// Find the exponent for the display denom
247243
foundDisplayDenom := false
248244
for _, unit := range metadata.DenomUnits {
@@ -311,7 +307,12 @@ func ConvertDecCoinToDisplayUnit(coins []github_com_cosmos_cosmos_sdk_types.DecC
311307
convertedAmount = coin.Amount.Mul(multiplier)
312308
}
313309

314-
convertedCoins = append(convertedCoins, github_com_cosmos_cosmos_sdk_types.NewDecCoinFromDec(displayDenom, convertedAmount))
310+
// Use a struct literal instead of NewDecCoinFromDec so short display denoms (e.g. "om")
311+
// can still be represented after conversion.
312+
convertedCoins = append(convertedCoins, github_com_cosmos_cosmos_sdk_types.DecCoin{
313+
Denom: displayDenom,
314+
Amount: convertedAmount,
315+
})
315316
}
316317

317318
return &convertedCoins, nil
@@ -328,17 +329,11 @@ func ConvertFloatInBaseUnitToDisplayUnit(value float64, metadata bank.Metadata)
328329
// If no display is set, default to base
329330
if metadata.Display == "" {
330331
displayDenom = metadata.Base
331-
if err := github_com_cosmos_cosmos_sdk_types.ValidateDenom(displayDenom); err != nil {
332-
return 0, "", fmt.Errorf("invalid display denom %q for base %q: %w", displayDenom, metadata.Base, err)
333-
}
334332
// If display is base, no conversion needed
335333
return value, displayDenom, nil
336334
} else {
337335
displayDenom = metadata.Display
338336
}
339-
if err := github_com_cosmos_cosmos_sdk_types.ValidateDenom(displayDenom); err != nil {
340-
return 0, "", fmt.Errorf("invalid display denom %q for base %q: %w", displayDenom, metadata.Base, err)
341-
}
342337

343338
// Find the exponent for the display denom
344339
foundDisplayDenom := false

td2/validator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func (cc *ChainConfig) GetValInfo(first bool) (err error) {
179179
}
180180
}
181181
if first {
182-
l("⚙️", cc.ValAddress[:20], "... is using consensus key:", cc.valInfo.Valcons)
182+
l("⚙️ ", cc.ValAddress[:20], "... is using consensus key: ", cc.valInfo.Valcons)
183183
}
184184
}
185185

0 commit comments

Comments
 (0)