package auth import ( "testing" "github.com/stretchr/testify/require" "cosmossdk.io/depinject" "cosmossdk.io/log" basedepinject "cosmossdk.io/x/accounts/defaults/base/depinject" "github.com/cosmos/cosmos-sdk/tests/integration/v2" "github.com/cosmos/cosmos-sdk/testutil/configurator" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/keeper" ) func BenchmarkAccountMapperGetAccountFound(b *testing.B) { b.ReportAllocs() moduleConfigs := []configurator.ModuleOption{ configurator.AccountsModule(), configurator.AuthModule(), configurator.BankModule(), configurator.VestingModule(), configurator.StakingModule(), configurator.TxModule(), configurator.ValidateModule(), configurator.ConsensusModule(), configurator.GenutilModule(), } var accountKeeper keeper.AccountKeeper startupCfg := integration.DefaultStartUpConfig(b) app, err := integration.NewApp( depinject.Configs(configurator.NewAppV2Config(moduleConfigs...), depinject.Provide( // inject desired account types: basedepinject.ProvideAccount, // provide base account options basedepinject.ProvideSecp256K1PubKey, // provide extra accounts ProvideMockRetroCompatAccountValid, ProvideMockRetroCompatAccountNoInfo, ProvideMockRetroCompatAccountNoImplement, ), depinject.Supply(log.NewNopLogger())), startupCfg, &accountKeeper) require.NoError(b, err) ctx := app.StateLatestContext(b) // assumes b.N < 2**24 for i := 0; i < b.N; i++ { arr := []byte{byte((i & 0xFF0000) >> 16), byte((i & 0xFF00) >> 8), byte(i & 0xFF)} addr := sdk.AccAddress(arr) acc := accountKeeper.NewAccountWithAddress(ctx, addr) accountKeeper.SetAccount(ctx, acc) } b.ResetTimer() for i := 0; i < b.N; i++ { arr := []byte{byte((i & 0xFF0000) >> 16), byte((i & 0xFF00) >> 8), byte(i & 0xFF)} accountKeeper.GetAccount(ctx, sdk.AccAddress(arr)) } } func BenchmarkAccountMapperSetAccount(b *testing.B) { b.ReportAllocs() moduleConfigs := []configurator.ModuleOption{ configurator.AccountsModule(), configurator.AuthModule(), configurator.BankModule(), configurator.VestingModule(), configurator.StakingModule(), configurator.TxModule(), configurator.ValidateModule(), configurator.ConsensusModule(), configurator.GenutilModule(), } var accountKeeper keeper.AccountKeeper startupCfg := integration.DefaultStartUpConfig(b) app, err := integration.NewApp( depinject.Configs(configurator.NewAppV2Config(moduleConfigs...), depinject.Provide( // inject desired account types: basedepinject.ProvideAccount, // provide base account options basedepinject.ProvideSecp256K1PubKey, // provide extra accounts ProvideMockRetroCompatAccountValid, ProvideMockRetroCompatAccountNoInfo, ProvideMockRetroCompatAccountNoImplement, ), depinject.Supply(log.NewNopLogger())), startupCfg, &accountKeeper) require.NoError(b, err) ctx := app.StateLatestContext(b) b.ResetTimer() // assumes b.N < 2**24 for i := 0; i < b.N; i++ { arr := []byte{byte((i & 0xFF0000) >> 16), byte((i & 0xFF00) >> 8), byte(i & 0xFF)} addr := sdk.AccAddress(arr) acc := accountKeeper.NewAccountWithAddress(ctx, addr) accountKeeper.SetAccount(ctx, acc) } }