mukan-sdk/testutil/configurator/configurator.go
Mukan Erkin Törük 20afb5db80
Some checks failed
Build SimApp / build (amd64) (push) Waiting to run
Build SimApp / build (arm64) (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Build & Push / build (push) Waiting to run
Run Gosec / Gosec (push) Waiting to run
Lint / golangci-lint (push) Waiting to run
Checks dependencies and mocks generation / Check go mod tidy (push) Waiting to run
Checks dependencies and mocks generation / Check up to date mocks (push) Waiting to run
System Tests / setup (push) Waiting to run
System Tests / test-system (push) Blocked by required conditions
System Tests / test-system-legacy (push) Blocked by required conditions
Tests / Code Coverage / split-test-files (push) Waiting to run
Tests / Code Coverage / tests (00) (push) Blocked by required conditions
Tests / Code Coverage / tests (01) (push) Blocked by required conditions
Tests / Code Coverage / tests (02) (push) Blocked by required conditions
Tests / Code Coverage / tests (03) (push) Blocked by required conditions
Tests / Code Coverage / test-integration (push) Waiting to run
Tests / Code Coverage / test-e2e (push) Waiting to run
Tests / Code Coverage / repo-analysis (push) Blocked by required conditions
Tests / Code Coverage / test-sim-nondeterminism (push) Waiting to run
Tests / Code Coverage / test-clientv2 (push) Waiting to run
Tests / Code Coverage / test-core (push) Waiting to run
Tests / Code Coverage / test-depinject (push) Waiting to run
Tests / Code Coverage / test-errors (push) Waiting to run
Tests / Code Coverage / test-math (push) Waiting to run
Tests / Code Coverage / test-schema (push) Waiting to run
Tests / Code Coverage / test-collections (push) Waiting to run
Tests / Code Coverage / test-cosmovisor (push) Waiting to run
Tests / Code Coverage / test-confix (push) Waiting to run
Tests / Code Coverage / test-store (push) Waiting to run
Tests / Code Coverage / test-log (push) Waiting to run
Tests / Code Coverage / test-x-tx (push) Waiting to run
Tests / Code Coverage / test-x-nft (push) Waiting to run
Tests / Code Coverage / test-x-circuit (push) Waiting to run
Tests / Code Coverage / test-x-feegrant (push) Waiting to run
Tests / Code Coverage / test-x-evidence (push) Waiting to run
Tests / Code Coverage / test-x-upgrade (push) Waiting to run
Tests / Code Coverage / test-tools-benchmark (push) Waiting to run
Build & Push SDK Proto Builder / build (push) Has been cancelled
initial: sovereign Mukan Network fork
2026-05-11 03:18:24 +03:00

396 lines
9.8 KiB
Go

package configurator
import (
runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1"
appv1alpha1 "cosmossdk.io/api/cosmos/app/v1alpha1"
authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1"
authzmodulev1 "cosmossdk.io/api/cosmos/authz/module/v1"
bankmodulev1 "cosmossdk.io/api/cosmos/bank/module/v1"
circuitmodulev1 "cosmossdk.io/api/cosmos/circuit/module/v1"
consensusmodulev1 "cosmossdk.io/api/cosmos/consensus/module/v1"
distrmodulev1 "cosmossdk.io/api/cosmos/distribution/module/v1"
evidencemodulev1 "cosmossdk.io/api/cosmos/evidence/module/v1"
feegrantmodulev1 "cosmossdk.io/api/cosmos/feegrant/module/v1"
genutilmodulev1 "cosmossdk.io/api/cosmos/genutil/module/v1"
govmodulev1 "cosmossdk.io/api/cosmos/gov/module/v1"
groupmodulev1 "cosmossdk.io/api/cosmos/group/module/v1"
mintmodulev1 "cosmossdk.io/api/cosmos/mint/module/v1"
nftmodulev1 "cosmossdk.io/api/cosmos/nft/module/v1"
paramsmodulev1 "cosmossdk.io/api/cosmos/params/module/v1"
protocolpoolmodulev1 "cosmossdk.io/api/cosmos/protocolpool/module/v1"
slashingmodulev1 "cosmossdk.io/api/cosmos/slashing/module/v1"
stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1"
txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1"
vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1"
"cosmossdk.io/core/appconfig"
"cosmossdk.io/depinject"
protocolpooltypes "github.com/cosmos/cosmos-sdk/x/protocolpool/types"
)
// Config should never need to be instantiated manually and is solely used for ModuleOption.
type Config struct {
ModuleConfigs map[string]*appv1alpha1.ModuleConfig
PreBlockersOrder []string
BeginBlockersOrder []string
EndBlockersOrder []string
InitGenesisOrder []string
setInitGenesis bool
}
func defaultConfig() *Config {
return &Config{
ModuleConfigs: make(map[string]*appv1alpha1.ModuleConfig),
PreBlockersOrder: []string{
"upgrade",
},
BeginBlockersOrder: []string{
"mint",
"distribution",
"slashing",
"evidence",
"staking",
"auth",
"bank",
"gov",
"genutil",
"authz",
"feegrant",
"nft",
"group",
"params",
"consensus",
"vesting",
"circuit",
"protocolpool",
},
EndBlockersOrder: []string{
"gov",
"staking",
"auth",
"bank",
"distribution",
"slashing",
"mint",
"genutil",
"evidence",
"authz",
"feegrant",
"nft",
"group",
"params",
"consensus",
"upgrade",
"vesting",
"circuit",
"protocolpool",
},
InitGenesisOrder: []string{
"auth",
"bank",
"distribution",
"staking",
"slashing",
"gov",
"mint",
"genutil",
"evidence",
"authz",
"feegrant",
"nft",
"group",
"params",
"consensus",
"upgrade",
"vesting",
"circuit",
"protocolpool",
},
setInitGenesis: true,
}
}
type ModuleOption func(config *Config)
func WithCustomPreBlockersOrder(preBlockOrder ...string) ModuleOption {
return func(config *Config) {
config.PreBlockersOrder = preBlockOrder
}
}
func WithCustomBeginBlockersOrder(beginBlockOrder ...string) ModuleOption {
return func(config *Config) {
config.BeginBlockersOrder = beginBlockOrder
}
}
func WithCustomEndBlockersOrder(endBlockersOrder ...string) ModuleOption {
return func(config *Config) {
config.EndBlockersOrder = endBlockersOrder
}
}
func WithCustomInitGenesisOrder(initGenesisOrder ...string) ModuleOption {
return func(config *Config) {
config.InitGenesisOrder = initGenesisOrder
}
}
func BankModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["bank"] = &appv1alpha1.ModuleConfig{
Name: "bank",
Config: appconfig.WrapAny(&bankmodulev1.Module{}),
}
}
}
func AuthModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["auth"] = &appv1alpha1.ModuleConfig{
Name: "auth",
Config: appconfig.WrapAny(&authmodulev1.Module{
Bech32Prefix: "cosmos",
ModuleAccountPermissions: []*authmodulev1.ModuleAccountPermission{
{Account: "fee_collector"},
{Account: "distribution"},
{Account: "mint", Permissions: []string{"minter"}},
{Account: "bonded_tokens_pool", Permissions: []string{"burner", "staking"}},
{Account: "not_bonded_tokens_pool", Permissions: []string{"burner", "staking"}},
{Account: "gov", Permissions: []string{"burner"}},
{Account: "nft"},
{Account: protocolpooltypes.ModuleName},
{Account: protocolpooltypes.ProtocolPoolEscrowAccount},
},
}),
}
}
}
func ParamsModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["params"] = &appv1alpha1.ModuleConfig{
Name: "params",
Config: appconfig.WrapAny(&paramsmodulev1.Module{}),
}
}
}
func TxModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["tx"] = &appv1alpha1.ModuleConfig{
Name: "tx",
Config: appconfig.WrapAny(&txconfigv1.Config{}),
}
}
}
func StakingModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["staking"] = &appv1alpha1.ModuleConfig{
Name: "staking",
Config: appconfig.WrapAny(&stakingmodulev1.Module{}),
}
}
}
func SlashingModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["slashing"] = &appv1alpha1.ModuleConfig{
Name: "slashing",
Config: appconfig.WrapAny(&slashingmodulev1.Module{}),
}
}
}
func GenutilModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["genutil"] = &appv1alpha1.ModuleConfig{
Name: "genutil",
Config: appconfig.WrapAny(&genutilmodulev1.Module{}),
}
}
}
func DistributionModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["distribution"] = &appv1alpha1.ModuleConfig{
Name: "distribution",
Config: appconfig.WrapAny(&distrmodulev1.Module{}),
}
}
}
func FeegrantModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["feegrant"] = &appv1alpha1.ModuleConfig{
Name: "feegrant",
Config: appconfig.WrapAny(&feegrantmodulev1.Module{}),
}
}
}
func VestingModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["vesting"] = &appv1alpha1.ModuleConfig{
Name: "vesting",
Config: appconfig.WrapAny(&vestingmodulev1.Module{}),
}
}
}
func GovModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["gov"] = &appv1alpha1.ModuleConfig{
Name: "gov",
Config: appconfig.WrapAny(&govmodulev1.Module{}),
}
}
}
func ConsensusModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["consensus"] = &appv1alpha1.ModuleConfig{
Name: "consensus",
Config: appconfig.WrapAny(&consensusmodulev1.Module{}),
}
}
}
func MintModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["mint"] = &appv1alpha1.ModuleConfig{
Name: "mint",
Config: appconfig.WrapAny(&mintmodulev1.Module{}),
GolangBindings: []*appv1alpha1.GolangBinding{
{
InterfaceType: "github.com/cosmos/cosmos-sdk/x/mint/types/types.StakingKeeper",
Implementation: "github.com/cosmos/cosmos-sdk/x/staking/keeper/*keeper.Keeper",
},
},
}
}
}
func EvidenceModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["evidence"] = &appv1alpha1.ModuleConfig{
Name: "evidence",
Config: appconfig.WrapAny(&evidencemodulev1.Module{}),
}
}
}
func AuthzModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["authz"] = &appv1alpha1.ModuleConfig{
Name: "authz",
Config: appconfig.WrapAny(&authzmodulev1.Module{}),
}
}
}
func GroupModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["group"] = &appv1alpha1.ModuleConfig{
Name: "group",
Config: appconfig.WrapAny(&groupmodulev1.Module{}),
}
}
}
func NFTModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["nft"] = &appv1alpha1.ModuleConfig{
Name: "nft",
Config: appconfig.WrapAny(&nftmodulev1.Module{}),
}
}
}
func CircuitModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs["circuit"] = &appv1alpha1.ModuleConfig{
Name: "circuit",
Config: appconfig.WrapAny(&circuitmodulev1.Module{}),
}
}
}
func ProtocolPoolModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs[protocolpooltypes.ModuleName] = &appv1alpha1.ModuleConfig{
Name: protocolpooltypes.ModuleName,
Config: appconfig.WrapAny(&protocolpoolmodulev1.Module{}),
}
}
}
func OmitInitGenesis() ModuleOption {
return func(config *Config) {
config.setInitGenesis = false
}
}
func NewAppConfig(opts ...ModuleOption) depinject.Config {
cfg := defaultConfig()
for _, opt := range opts {
opt(cfg)
}
preBlockers := make([]string, 0)
beginBlockers := make([]string, 0)
endBlockers := make([]string, 0)
initGenesis := make([]string, 0)
overrides := make([]*runtimev1alpha1.StoreKeyConfig, 0)
for _, s := range cfg.PreBlockersOrder {
if _, ok := cfg.ModuleConfigs[s]; ok {
preBlockers = append(preBlockers, s)
}
}
for _, s := range cfg.BeginBlockersOrder {
if _, ok := cfg.ModuleConfigs[s]; ok {
beginBlockers = append(beginBlockers, s)
}
}
for _, s := range cfg.EndBlockersOrder {
if _, ok := cfg.ModuleConfigs[s]; ok {
endBlockers = append(endBlockers, s)
}
}
for _, s := range cfg.InitGenesisOrder {
if _, ok := cfg.ModuleConfigs[s]; ok {
initGenesis = append(initGenesis, s)
}
}
if _, ok := cfg.ModuleConfigs["auth"]; ok {
overrides = append(overrides, &runtimev1alpha1.StoreKeyConfig{ModuleName: "auth", KvStoreKey: "acc"})
}
runtimeConfig := &runtimev1alpha1.Module{
AppName: "TestApp",
PreBlockers: preBlockers,
BeginBlockers: beginBlockers,
EndBlockers: endBlockers,
OverrideStoreKeys: overrides,
}
if cfg.setInitGenesis {
runtimeConfig.InitGenesis = initGenesis
}
modules := []*appv1alpha1.ModuleConfig{{
Name: "runtime",
Config: appconfig.WrapAny(runtimeConfig),
}}
for _, m := range cfg.ModuleConfigs {
modules = append(modules, m)
}
return appconfig.Compose(&appv1alpha1.Config{Modules: modules})
}