diff --git a/x/stake/types/inflation_test.go b/x/stake/types/inflation_test.go index 555408853c..f2149593f6 100644 --- a/x/stake/types/inflation_test.go +++ b/x/stake/types/inflation_test.go @@ -82,6 +82,41 @@ func TestProcessProvisions(t *testing.T) { checkFinalPoolValues(t, pool, sdk.NewRat(initialTotalTokens), cumulativeExpProvs) } +// Benchmark precision +func BenchmarkProcessProvisions10000(b *testing.B) { + precision = 10000 + pool := InitialPool() + params := DefaultParams() + + var initialTotalTokens int64 = 550000000 + var cumulativeExpProvs = sdk.ZeroRat() + pool.LooseTokens = sdk.NewRat(initialTotalTokens) + + // process the provisions for a year + for hr := 0; hr < b.N; hr++ { + var expProvisions sdk.Rat + _, expProvisions, pool, _ = updateProvisionsBare(pool, params, hr) + cumulativeExpProvs = cumulativeExpProvs.Add(expProvisions) + } +} + +func BenchmarkProcessProvisions100000000000(b *testing.B) { + precision = 100000000000 + pool := InitialPool() + params := DefaultParams() + + var initialTotalTokens int64 = 550000000 + var cumulativeExpProvs = sdk.ZeroRat() + pool.LooseTokens = sdk.NewRat(initialTotalTokens) + + // process the provisions for a year + for hr := 0; hr < b.N; hr++ { + var expProvisions sdk.Rat + _, expProvisions, pool, _ = updateProvisionsBare(pool, params, hr) + cumulativeExpProvs = cumulativeExpProvs.Add(expProvisions) + } +} + //_________________________________________________________________________________________ ////////////////////////////////HELPER FUNCTIONS BELOW///////////////////////////////////// @@ -94,10 +129,7 @@ func checkFinalPoolValues(t *testing.T, pool Pool, initialTotalTokens, cumulativ // Processes provisions are added to the pool correctly every hour // Returns expected Provisions, expected Inflation, and pool, to help with cumulative calculations back in main Tests func updateProvisions(t *testing.T, pool Pool, params Params, hr int) (sdk.Rat, sdk.Rat, Pool) { - expInflation := pool.NextInflation(params) - expProvisions := expInflation.Mul(pool.TokenSupply()).Quo(hrsPerYrRat) - startTotalSupply := pool.TokenSupply() - pool = pool.ProcessProvisions(params) + expInflation, expProvisions, pool, startTotalSupply := updateProvisionsBare(pool, params, hr) //check provisions were added to pool require.True(sdk.RatEq(t, startTotalSupply.Add(expProvisions), pool.TokenSupply())) @@ -105,6 +137,14 @@ func updateProvisions(t *testing.T, pool Pool, params Params, hr int) (sdk.Rat, return expInflation, expProvisions, pool } +func updateProvisionsBare(pool Pool, params Params, hr int) (sdk.Rat, sdk.Rat, Pool, sdk.Rat) { + expInflation := pool.NextInflation(params) + expProvisions := expInflation.Mul(pool.TokenSupply()).Quo(hrsPerYrRat) + startTotalSupply := pool.TokenSupply() + pool = pool.ProcessProvisions(params) + return expInflation, expProvisions, pool, startTotalSupply +} + // Checks that The inflation will correctly increase or decrease after an update to the pool // nolint: gocyclo func checkInflation(t *testing.T, pool Pool, previousInflation, updatedInflation sdk.Rat, msg string) { diff --git a/x/stake/types/pool.go b/x/stake/types/pool.go index 01dfacadaf..6e82005bbd 100644 --- a/x/stake/types/pool.go +++ b/x/stake/types/pool.go @@ -80,7 +80,7 @@ func (p Pool) bondedTokensToLoose(bondedTokens sdk.Rat) Pool { //_______________________________________________________________________ // Inflation -const precision = 100000000000 // increased to this precision for accuracy +var precision int64 = 100000000000 // increased to this precision for accuracy var hrsPerYrRat = sdk.NewRat(8766) // as defined by a julian year of 365.25 days // process provisions for an hour period