From 29c15dd2cd0d03f7f815365a0a6048412500d2dc Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Thu, 21 Dec 2023 09:17:35 -0600 Subject: [PATCH 1/3] Use mut int ops in a hotloop --- x/lockup/types/lock.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x/lockup/types/lock.go b/x/lockup/types/lock.go index fc3edce6691..2a93b1b2860 100644 --- a/x/lockup/types/lock.go +++ b/x/lockup/types/lock.go @@ -2,6 +2,7 @@ package types import ( "fmt" + "math/big" "strings" "time" @@ -64,17 +65,16 @@ func (p PeriodLock) SingleCoin() (sdk.Coin, error) { // TODO: Can we use sumtree instead here? func SumLocksByDenom(locks []PeriodLock, denom string) osmomath.Int { - sum := osmomath.NewInt(0) + sumBi := big.NewInt(0) // validate the denom once, so we can avoid the expensive validate check in the hot loop. err := sdk.ValidateDenom(denom) if err != nil { panic(fmt.Errorf("invalid denom used internally: %s, %v", denom, err)) } for _, lock := range locks { - // TODO: Replace with Mutative Int Operations - sum = sum.Add(lock.Coins.AmountOfNoDenomValidation(denom)) + sumBi.Add(sumBi, lock.Coins.AmountOfNoDenomValidation(denom).BigIntMut()) } - return sum + return osmomath.NewIntFromBigInt(sumBi) } // quick fix for getting native denom from synthetic denom. From d04bb337bd77d17e76148fe4e8a32b187a264fcb Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Thu, 21 Dec 2023 09:22:45 -0600 Subject: [PATCH 2/3] Also eliminate runtime-eq check --- x/lockup/types/lock.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/x/lockup/types/lock.go b/x/lockup/types/lock.go index 2a93b1b2860..ad1d5006297 100644 --- a/x/lockup/types/lock.go +++ b/x/lockup/types/lock.go @@ -64,6 +64,7 @@ func (p PeriodLock) SingleCoin() (sdk.Coin, error) { } // TODO: Can we use sumtree instead here? +// Assumes that caller is passing in locks that contain denom func SumLocksByDenom(locks []PeriodLock, denom string) osmomath.Int { sumBi := big.NewInt(0) // validate the denom once, so we can avoid the expensive validate check in the hot loop. @@ -72,7 +73,14 @@ func SumLocksByDenom(locks []PeriodLock, denom string) osmomath.Int { panic(fmt.Errorf("invalid denom used internally: %s, %v", denom, err)) } for _, lock := range locks { - sumBi.Add(sumBi, lock.Coins.AmountOfNoDenomValidation(denom).BigIntMut()) + var amt osmomath.Int + // skip a 1second cumulative runtimeEq check + if len(lock.Coins) == 1 { + amt = lock.Coins[0].Amount + } else { + amt = lock.Coins.AmountOfNoDenomValidation(denom) + } + sumBi.Add(sumBi, amt.BigIntMut()) } return osmomath.NewIntFromBigInt(sumBi) } From d08af07726344320ae39065c49dadca84bd4db03 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Thu, 21 Dec 2023 09:30:24 -0600 Subject: [PATCH 3/3] Add changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ac76b5e86e..fe7d4602743 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,7 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Misc Improvements * [#7106](https://github.com/osmosis-labs/osmosis/pull/7106) Halve the time of log2 calculation (speeds up TWAP code) -* [#7093](https://github.com/osmosis-labs/osmosis/pull/7093),[#7100](https://github.com/osmosis-labs/osmosis/pull/7100) Lower CPU overheads of the Osmosis epoch. +* [#7093](https://github.com/osmosis-labs/osmosis/pull/7093),[#7100](https://github.com/osmosis-labs/osmosis/pull/7100),[#7172](https://github.com/osmosis-labs/osmosis/pull/7093) Lower CPU overheads of the Osmosis epoch. ## v21.0.0