Some checks are pending
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
396 lines
9.8 KiB
Go
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 "git.cw.tr/mukan-network/mukan-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(¶msmodulev1.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: "git.cw.tr/mukan-network/mukan-sdk/x/mint/types/types.StakingKeeper",
|
|
Implementation: "git.cw.tr/mukan-network/mukan-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})
|
|
}
|