From e34ff9aaa08f45220276e9b849f5d2eab8c5be66 Mon Sep 17 00:00:00 2001 From: Sergey <83376337+freak12techno@users.noreply.github.com> Date: Fri, 26 Jul 2024 16:10:45 +0300 Subject: [PATCH] feat: use denom exponent (#25) --- config.example.toml | 8 ++++---- pkg/config/denom_info.go | 2 +- pkg/queriers/balance.go | 3 ++- pkg/queriers/balance_test.go | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/config.example.toml b/config.example.toml index 35c1868..4c4cd3a 100644 --- a/config.example.toml +++ b/config.example.toml @@ -26,16 +26,16 @@ denoms = [ # 1) denom - the base denom (like uatom for Cosmos Hub) # 2) display - denom - the denom name to display it (like atom for Cosmos Hub) # 3) coingecko-currency - a Coinecko API codename for a currency - # 4) denom-coefficient - the coefficient you need to multiply base denom to to get 1 token on Coingecko. + # 4) denom-exponent - the power of the coefficient you need to multiply base denom to get 1 token on Coingecko. # Example: on Cosmos network the base denom is uatom, 1 atom = 1_000_000 uatom # and 1 atom on Coingecko = $10, and your wallet has 10 atom, or 10_000_000 uatom. # Then you need to specify the following parameters: # coingecko-currency = "cosmos-hub" # base-denom = "uatom" - # denom-coefficient = 1000000 + # denom-exponent = 6 # so the coefficient == 10^6 == 1_000_000 # and after that, the /metrics endpoint will return your total balance as $100. - # Defaults to 1000000 - { denom = "ubtsg", display-denom = "btsg", coingecko-currency = "bitsong", denom-coefficient = 1000000 } + # Defaults to 6 + { denom = "ubtsg", display-denom = "btsg", coingecko-currency = "bitsong", denom-exponent = 6 } ] # Per-wallet config. You can specify multiple wallet configs per each chain. diff --git a/pkg/config/denom_info.go b/pkg/config/denom_info.go index 7176522..12daacb 100644 --- a/pkg/config/denom_info.go +++ b/pkg/config/denom_info.go @@ -3,7 +3,7 @@ package config type DenomInfo struct { Denom string `toml:"denom"` DisplayDenom string `toml:"display-denom"` - DenomCoefficient int64 `default:"1000000" toml:"denom-coefficient"` + DenomExponent int `default:"6" toml:"denom-exponent"` CoingeckoCurrency string `toml:"coingecko-currency"` } diff --git a/pkg/queriers/balance.go b/pkg/queriers/balance.go index 1bbb882..c6f770d 100644 --- a/pkg/queriers/balance.go +++ b/pkg/queriers/balance.go @@ -5,6 +5,7 @@ import ( "main/pkg/config" "main/pkg/tendermint" "main/pkg/types" + "math" "sync" "go.opentelemetry.io/otel/attribute" @@ -93,7 +94,7 @@ func (q *BalanceQuerier) GetMetrics(ctx context.Context) ([]prometheus.Collector denomInfo, found := chain.FindDenomByName(balance.Denom) if found { denom = denomInfo.GetName() - amount /= float64(denomInfo.DenomCoefficient) + amount /= math.Pow10(denomInfo.DenomExponent) } balancesGauge.With(prometheus.Labels{ diff --git a/pkg/queriers/balance_test.go b/pkg/queriers/balance_test.go index a437887..adf1d67 100644 --- a/pkg/queriers/balance_test.go +++ b/pkg/queriers/balance_test.go @@ -63,7 +63,7 @@ func TestBalanceQuerierOk(t *testing.T) { Name: "name", Group: "group", }}, - Denoms: []configPkg.DenomInfo{{Denom: "uatom", DisplayDenom: "atom", DenomCoefficient: 1000000}}, + Denoms: []configPkg.DenomInfo{{Denom: "uatom", DisplayDenom: "atom", DenomExponent: 6}}, }}} tracer := tracing.InitNoopTracer()