From af92d0746e74cf2ad9187fb1c6d9bb16f2002938 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 26 Feb 2025 19:49:45 +0300 Subject: [PATCH] Fix: set min gas price --- cmd/api/gas/tracker.go | 16 ++++++++++++++++ cmd/api/gas/tracker_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/cmd/api/gas/tracker.go b/cmd/api/gas/tracker.go index e7bc7327..b16bcabc 100644 --- a/cmd/api/gas/tracker.go +++ b/cmd/api/gas/tracker.go @@ -11,6 +11,7 @@ import ( "github.com/celenium-io/celestia-indexer/cmd/api/bus" "github.com/celenium-io/celestia-indexer/internal/currency" "github.com/celenium-io/celestia-indexer/internal/storage" + "github.com/celestiaorg/celestia-app/v3/pkg/appconsts" "github.com/dipdup-io/workerpool" sdk "github.com/dipdup-net/indexer-sdk/pkg/storage" "github.com/rs/zerolog" @@ -203,12 +204,17 @@ func (tracker *Tracker) State() GasPrice { return tracker.gasState } +var minGasPrice = decimal.NewFromFloat(appconsts.DefaultMinGasPrice) + func (tracker *Tracker) computeMetrics() error { slow := decimal.New(0, 1) median := decimal.New(0, 1) fast := decimal.New(0, 1) err := tracker.q.Range(func(item info) (bool, error) { + if len(item.Percentiles) < 3 { + return false, nil + } slow = slow.Add(item.Percentiles[0]) median = median.Add(item.Percentiles[1]) fast = fast.Add(item.Percentiles[2]) @@ -223,6 +229,16 @@ func (tracker *Tracker) computeMetrics() error { median = median.Div(decimal.NewFromInt(count)) fast = fast.Div(decimal.NewFromInt(count)) + if slow.LessThan(minGasPrice) { + slow = minGasPrice.Copy() + } + if median.LessThan(minGasPrice) { + median = minGasPrice.Copy() + } + if fast.LessThan(minGasPrice) { + fast = minGasPrice.Copy() + } + tracker.mx.Lock() { tracker.gasState.Slow = currency.StringTia(slow) diff --git a/cmd/api/gas/tracker_test.go b/cmd/api/gas/tracker_test.go index fa9feb0a..cc387fd3 100644 --- a/cmd/api/gas/tracker_test.go +++ b/cmd/api/gas/tracker_test.go @@ -52,6 +52,30 @@ func TestTracker_computeMetrics(t *testing.T) { require.Equal(t, "3.000000", state.Median) require.Equal(t, "4.000000", state.Fast) }) + + t.Run("compute metrics: less than default gas price", func(t *testing.T) { + tracker := NewTracker(nil, nil, nil, nil) + + tracker.q.Push(info{ + Height: 1, + Percentiles: []decimal.Decimal{}, + }) + tracker.q.Push(info{ + Height: 2, + Percentiles: []decimal.Decimal{}, + }) + tracker.q.Push(info{ + Height: 3, + Percentiles: []decimal.Decimal{}, + }) + + err := tracker.computeMetrics() + require.NoError(t, err) + state := tracker.State() + require.Equal(t, "0.002000", state.Slow) + require.Equal(t, "0.002000", state.Median) + require.Equal(t, "0.002000", state.Fast) + }) } func TestTracker_processBlock(t *testing.T) {