cosmos-sdk/tools/benchmark/module/depinject.go
Đông Liều 9539caae6e
feat(tools/benchmark): introduce benchmark module (#24021)
Co-authored-by: Alex | Interchain Labs <alex@interchainlabs.io>
2025-03-20 10:56:03 -04:00

63 lines
1.5 KiB
Go

package module
import (
"unsafe"
modulev1 "cosmossdk.io/api/cosmos/benchmark/module/v1"
"cosmossdk.io/core/appmodule"
"cosmossdk.io/core/store"
"cosmossdk.io/depinject"
"cosmossdk.io/depinject/appconfig"
"cosmossdk.io/log"
gen "cosmossdk.io/tools/benchmark/generator"
)
const (
ModuleName = "benchmark"
maxStoreKeyGenIterations = 100
)
func init() {
appconfig.RegisterModule(
&modulev1.Module{},
appconfig.Provide(
ProvideModule,
),
)
}
type KVStoreServiceFactory func([]byte) store.KVStoreService
type Input struct {
depinject.In
Logger log.Logger
Cfg *modulev1.Module
StoreFactory KVStoreServiceFactory
}
func ProvideModule(
in Input,
) (appmodule.AppModule, error) {
cfg := in.Cfg
kvMap := make(KVServiceMap)
storeKeys, err := gen.StoreKeys(ModuleName, cfg.GenesisParams.Seed, cfg.GenesisParams.BucketCount)
if err != nil {
return nil, err
}
for _, sk := range storeKeys {
kvService := in.StoreFactory(unsafeStrToBytes(sk))
kvMap[sk] = kvService
}
return NewAppModule(cfg.GenesisParams, storeKeys, kvMap, in.Logger), nil
}
type KVServiceMap map[string]store.KVStoreService
// unsafeStrToBytes uses unsafe to convert string into byte array. Returned bytes
// must not be altered after this function is called as it will cause a segmentation fault.
func unsafeStrToBytes(s string) []byte {
return unsafe.Slice(unsafe.StringData(s), len(s)) // ref https://github.com/golang/go/issues/53003#issuecomment-1140276077
}