package app
import (
"fmt"
wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
"github.com/cosmos/cosmos-sdk/x/authz"
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module"
"github.com/cosmos/cosmos-sdk/x/feegrant"
feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
feegrantmodule "github.com/cosmos/cosmos-sdk/x/feegrant/module"
"github.com/cosmos/ibc-go/v3/modules/apps/transfer"
ibctransferkeeper "github.com/cosmos/ibc-go/v3/modules/apps/transfer/keeper"
ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types"
ibc "github.com/cosmos/ibc-go/v3/modules/core"
ibcclient "github.com/cosmos/ibc-go/v3/modules/core/02-client"
ibcclientclient "github.com/cosmos/ibc-go/v3/modules/core/02-client/client"
ibcclienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types"
porttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types"
ibchost "github.com/cosmos/ibc-go/v3/modules/core/24-host"
ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper"
_ "github.com/joinresistance/space-pussy/client/docs/statik"
"github.com/joinresistance/space-pussy/plugins/liquidity_plugin"
"io"
"net/http"
"os"
"path/filepath"
"strings"
"time"
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
"github.com/gorilla/mux"
ctypes "github.com/joinresistance/space-pussy/types"
"github.com/rakyll/statik/fs"
"github.com/tendermint/liquidity/x/liquidity"
liquiditykeeper "github.com/tendermint/liquidity/x/liquidity/keeper"
liquiditytypes "github.com/tendermint/liquidity/x/liquidity/types"
wasmplugins "github.com/joinresistance/space-pussy/plugins"
"github.com/joinresistance/space-pussy/x/dmn"
"github.com/joinresistance/space-pussy/x/resources"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec/types"
servertypes "github.com/cosmos/cosmos-sdk/server/types"
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
"github.com/spf13/cast"
dbm "github.com/tendermint/tm-db"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client/rpc"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/server/api"
"github.com/cosmos/cosmos-sdk/server/config"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/cosmos/cosmos-sdk/version"
"github.com/cosmos/cosmos-sdk/x/auth"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest"
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/cosmos/cosmos-sdk/x/auth/vesting"
"github.com/cosmos/cosmos-sdk/x/bank"
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
"github.com/cosmos/cosmos-sdk/x/capability"
capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
"github.com/cosmos/cosmos-sdk/x/crisis"
crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper"
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
distr "github.com/cosmos/cosmos-sdk/x/distribution"
distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client"
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
"github.com/cosmos/cosmos-sdk/x/evidence"
evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper"
evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types"
"github.com/cosmos/cosmos-sdk/x/genutil"
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
"github.com/cosmos/cosmos-sdk/x/gov"
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
"github.com/cosmos/cosmos-sdk/x/mint"
mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper"
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
sdkparams "github.com/cosmos/cosmos-sdk/x/params"
paramsclient "github.com/cosmos/cosmos-sdk/x/params/client"
paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper"
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
paramproposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
"github.com/cosmos/cosmos-sdk/x/slashing"
slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
"github.com/cosmos/cosmos-sdk/x/staking"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/cosmos/cosmos-sdk/x/upgrade"
upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client"
upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tendermint/tendermint/libs/log"
tmos "github.com/tendermint/tendermint/libs/os"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
"github.com/joinresistance/space-pussy/utils"
"github.com/joinresistance/space-pussy/x/bandwidth"
"github.com/joinresistance/space-pussy/x/cyberbank"
cyberbankkeeper "github.com/joinresistance/space-pussy/x/cyberbank/keeper"
cyberbanktypes "github.com/joinresistance/space-pussy/x/cyberbank/types"
"github.com/joinresistance/space-pussy/x/graph"
bandwidthkeeper "github.com/joinresistance/space-pussy/x/bandwidth/keeper"
bandwidthtypes "github.com/joinresistance/space-pussy/x/bandwidth/types"
graphkeeper "github.com/joinresistance/space-pussy/x/graph/keeper"
graphtypes "github.com/joinresistance/space-pussy/x/graph/types"
"github.com/joinresistance/space-pussy/x/rank"
rankkeeper "github.com/joinresistance/space-pussy/x/rank/keeper"
ranktypes "github.com/joinresistance/space-pussy/x/rank/types"
"github.com/CosmWasm/wasmd/x/wasm"
wasmclient "github.com/CosmWasm/wasmd/x/wasm/client"
wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
bandwidthwasm "github.com/joinresistance/space-pussy/x/bandwidth/wasm"
dmnwasm "github.com/joinresistance/space-pussy/x/dmn/wasm"
graphwasm "github.com/joinresistance/space-pussy/x/graph/wasm"
gridwasm "github.com/joinresistance/space-pussy/x/grid/wasm"
rankwasm "github.com/joinresistance/space-pussy/x/rank/wasm"
resourceswasm "github.com/joinresistance/space-pussy/x/resources/wasm"
grid "github.com/joinresistance/space-pussy/x/grid"
gridkeeper "github.com/joinresistance/space-pussy/x/grid/keeper"
gridtypes "github.com/joinresistance/space-pussy/x/grid/types"
dmnkeeper "github.com/joinresistance/space-pussy/x/dmn/keeper"
dmntypes "github.com/joinresistance/space-pussy/x/dmn/types"
resourceskeeper "github.com/joinresistance/space-pussy/x/resources/keeper"
resourcestypes "github.com/joinresistance/space-pussy/x/resources/types"
stakingwrap "github.com/joinresistance/space-pussy/x/staking"
"github.com/joinresistance/space-pussy/app/params"
tmjson "github.com/tendermint/tendermint/libs/json"
store "github.com/cosmos/cosmos-sdk/store/types"
)
const (
appName = "SpacePussy"
upgradeName = "v0.0.3"
)
var (
NodeDir = ".pussy"
Bech32Prefix = "pussy"
DefaultBondDenom = "pussy"
DefaultFeeDenom = "pussy"
DefaultReDnmString = `[a-zA-Z][a-zA-Z0-9/\-\.]{2,127}`
ProposalsEnabled = "true"
EnableSpecificProposals = ""
)
func GetEnabledProposals() []wasm.ProposalType {
if EnableSpecificProposals == "" {
if ProposalsEnabled == "true" {
return wasm.EnableAllProposals
}
return wasm.DisableAllProposals
}
chunks := strings.Split(EnableSpecificProposals, ",")
proposals, err := wasm.ConvertToProposals(chunks)
if err != nil {
panic(err)
}
return proposals
}
func overrideWasmVariables() {
wasmtypes.MaxWasmSize = 2 * 1024 * 1024
}
var (
DefaultNodeHome = os.ExpandEnv("$HOME/") + NodeDir
)
func init() {
sdk.DefaultPowerReduction = sdk.NewIntFromUint64(1000000000)
}
var (
ModuleBasics = module.NewBasicManager(
auth.AppModuleBasic{},
genutil.AppModuleBasic{},
bank.AppModuleBasic{},
capability.AppModuleBasic{},
staking.AppModuleBasic{},
mint.AppModuleBasic{},
distr.AppModuleBasic{},
gov.NewAppModuleBasic(append(
wasmclient.ProposalHandlers,
paramsclient.ProposalHandler,
distrclient.ProposalHandler,
upgradeclient.ProposalHandler,
upgradeclient.CancelProposalHandler,
ibcclientclient.UpdateClientProposalHandler,
ibcclientclient.UpgradeProposalHandler,
)...,
),
sdkparams.AppModuleBasic{},
crisis.AppModuleBasic{},
slashing.AppModuleBasic{},
feegrantmodule.AppModuleBasic{},
authzmodule.AppModuleBasic{},
ibc.AppModuleBasic{},
upgrade.AppModuleBasic{},
evidence.AppModuleBasic{},
transfer.AppModuleBasic{},
vesting.AppModuleBasic{},
liquidity.AppModuleBasic{},
wasm.AppModuleBasic{},
bandwidth.AppModuleBasic{},
cyberbank.AppModuleBasic{},
graph.AppModuleBasic{},
rank.AppModuleBasic{},
grid.AppModuleBasic{},
dmn.AppModuleBasic{},
resources.AppModuleBasic{},
)
maccPerms = map[string][]string{
authtypes.FeeCollectorName: nil,
distrtypes.ModuleName: nil,
minttypes.ModuleName: {authtypes.Minter},
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
govtypes.ModuleName: {authtypes.Burner},
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
wasm.ModuleName: {authtypes.Burner},
liquiditytypes.ModuleName: {authtypes.Minter, authtypes.Burner},
gridtypes.GridPoolName: nil,
resourcestypes.ResourcesName: {authtypes.Minter, authtypes.Burner},
}
allowedReceivingModAcc = map[string]bool{
distrtypes.ModuleName: true,
}
)
var (
_ CosmosApp = (*App)(nil)
_ servertypes.Application = (*App)(nil)
)
func SdkCoinDenomRegex() string {
return DefaultReDnmString
}
type App struct {
*baseapp.BaseApp
legacyAmino *codec.LegacyAmino
appCodec codec.Codec
interfaceRegistry types.InterfaceRegistry
invCheckPeriod uint
keys map[string]*sdk.KVStoreKey
tkeys map[string]*sdk.TransientStoreKey
memKeys map[string]*sdk.MemoryStoreKey
AccountKeeper authkeeper.AccountKeeper
BankKeeper bankkeeper.Keeper
CapabilityKeeper *capabilitykeeper.Keeper
StakingKeeper stakingkeeper.Keeper
SlashingKeeper slashingkeeper.Keeper
MintKeeper mintkeeper.Keeper
DistrKeeper distrkeeper.Keeper
GovKeeper govkeeper.Keeper
CrisisKeeper crisiskeeper.Keeper
UpgradeKeeper upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
IBCKeeper *ibckeeper.Keeper EvidenceKeeper evidencekeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
AuthzKeeper authzkeeper.Keeper
WasmKeeper wasm.Keeper
LiquidityKeeper liquiditykeeper.Keeper
BandwidthMeter *bandwidthkeeper.BandwidthMeter
CyberbankKeeper *cyberbankkeeper.IndexedKeeper
GraphKeeper *graphkeeper.GraphKeeper
IndexKeeper *graphkeeper.IndexKeeper
RankKeeper *rankkeeper.StateKeeper
GridKeeper gridkeeper.Keeper
DmnKeeper *dmnkeeper.Keeper
ResourcesKeeper resourceskeeper.Keeper
ScopedIBCKeeper capabilitykeeper.ScopedKeeper
ScopedTransferKeeper capabilitykeeper.ScopedKeeper
ScopedWasmKeeper capabilitykeeper.ScopedKeeper
mm *module.Manager
configurator module.Configurator
}
func NewApp(
logger log.Logger,
db dbm.DB,
traceStore io.Writer,
loadLatest bool,
skipUpgradeHeights map[int64]bool,
homePath string,
invCheckPeriod uint,
encodingConfig params.EncodingConfig,
enabledProposals []wasm.ProposalType,
appOpts servertypes.AppOptions,
wasmOpts []wasm.Option,
baseAppOptions ...func(*baseapp.BaseApp),
) *App {
overrideWasmVariables()
appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino
interfaceRegistry := encodingConfig.InterfaceRegistry
bApp := baseapp.NewBaseApp(appName, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...)
bApp.SetCommitMultiStoreTracer(traceStore)
bApp.SetVersion(version.Version)
bApp.SetInterfaceRegistry(interfaceRegistry)
keys := sdk.NewKVStoreKeys(
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey,
evidencetypes.StoreKey, liquiditytypes.StoreKey, ibctransfertypes.StoreKey,
capabilitytypes.StoreKey, feegrant.StoreKey, authzkeeper.StoreKey,
bandwidthtypes.StoreKey,
graphtypes.StoreKey,
ranktypes.StoreKey,
gridtypes.StoreKey,
dmntypes.StoreKey,
wasm.StoreKey,
)
tkeys := sdk.NewTransientStoreKeys(
paramstypes.TStoreKey,
graphtypes.TStoreKey,
)
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
app := &App{
BaseApp: bApp,
legacyAmino: legacyAmino,
appCodec: appCodec,
interfaceRegistry: interfaceRegistry,
invCheckPeriod: invCheckPeriod,
keys: keys,
tkeys: tkeys,
memKeys: memKeys,
}
app.ParamsKeeper = initParamsKeeper(
appCodec,
legacyAmino,
keys[paramstypes.StoreKey],
tkeys[paramstypes.TStoreKey],
)
bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable()))
app.CapabilityKeeper = capabilitykeeper.NewKeeper(
appCodec,
keys[capabilitytypes.StoreKey],
memKeys[capabilitytypes.MemStoreKey],
)
scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName)
scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)
scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName)
app.CapabilityKeeper.Seal()
app.AccountKeeper = authkeeper.NewAccountKeeper(
appCodec, keys[authtypes.StoreKey],
app.GetSubspace(authtypes.ModuleName),
authtypes.ProtoBaseAccount,
maccPerms,
)
app.BankKeeper = bankkeeper.NewBaseKeeper(
appCodec,
keys[banktypes.StoreKey],
app.AccountKeeper,
app.GetSubspace(banktypes.ModuleName),
app.ModuleAccountAddrs(),
)
app.AuthzKeeper = authzkeeper.NewKeeper(
keys[authzkeeper.StoreKey],
appCodec,
app.BaseApp.MsgServiceRouter(),
)
app.FeeGrantKeeper = feegrantkeeper.NewKeeper(
appCodec,
keys[feegrant.StoreKey],
app.AccountKeeper,
)
app.CyberbankKeeper = cyberbankkeeper.NewIndexedKeeper(
appCodec,
keys[authtypes.StoreKey],
cyberbankkeeper.Wrap(app.BankKeeper),
app.AccountKeeper,
)
stakingKeeper := stakingkeeper.NewKeeper(
appCodec,
keys[stakingtypes.StoreKey],
app.AccountKeeper,
app.CyberbankKeeper.Proxy,
app.GetSubspace(stakingtypes.ModuleName),
)
app.MintKeeper = mintkeeper.NewKeeper(
appCodec,
keys[minttypes.StoreKey],
app.GetSubspace(minttypes.ModuleName),
&stakingKeeper,
app.AccountKeeper,
app.CyberbankKeeper.Proxy,
authtypes.FeeCollectorName,
)
app.DistrKeeper = distrkeeper.NewKeeper(
appCodec,
keys[distrtypes.StoreKey],
app.GetSubspace(distrtypes.ModuleName),
app.AccountKeeper,
app.CyberbankKeeper.Proxy,
&stakingKeeper,
authtypes.FeeCollectorName,
app.ModuleAccountAddrs(),
)
app.SlashingKeeper = slashingkeeper.NewKeeper(
appCodec,
keys[slashingtypes.StoreKey],
&stakingKeeper,
app.GetSubspace(slashingtypes.ModuleName),
)
app.CrisisKeeper = crisiskeeper.NewKeeper(
app.GetSubspace(crisistypes.ModuleName),
invCheckPeriod,
app.CyberbankKeeper.Proxy,
authtypes.FeeCollectorName,
)
app.UpgradeKeeper = upgradekeeper.NewKeeper(
skipUpgradeHeights,
keys[upgradetypes.StoreKey],
appCodec,
homePath,
app.BaseApp,
)
app.StakingKeeper = *stakingKeeper.SetHooks(
stakingtypes.NewMultiStakingHooks(
app.DistrKeeper.Hooks(),
app.SlashingKeeper.Hooks(),
),
)
app.CyberbankKeeper.Proxy.AddHook(
bandwidth.CollectAddressesWithStakeChange(),
)
app.BandwidthMeter = bandwidthkeeper.NewBandwidthMeter(
app.appCodec,
keys[bandwidthtypes.StoreKey],
app.CyberbankKeeper.Proxy,
app.GetSubspace(bandwidthtypes.ModuleName),
)
app.GraphKeeper = graphkeeper.NewKeeper(
appCodec,
keys[graphtypes.ModuleName],
tkeys[paramstypes.TStoreKey],
)
app.IndexKeeper = graphkeeper.NewIndexKeeper(
*app.GraphKeeper,
tkeys[paramstypes.TStoreKey],
)
computeUnit := ranktypes.ComputeUnit(cast.ToInt(appOpts.Get(rank.FlagComputeGPU)))
searchAPI := cast.ToBool(appOpts.Get(rank.FlagSearchAPI))
app.RankKeeper = rankkeeper.NewKeeper(
keys[ranktypes.ModuleName],
app.GetSubspace(ranktypes.ModuleName),
searchAPI,
app.CyberbankKeeper,
app.IndexKeeper,
app.GraphKeeper,
app.AccountKeeper,
computeUnit,
)
app.GridKeeper = gridkeeper.NewKeeper(
appCodec,
keys[gridtypes.ModuleName],
app.CyberbankKeeper.Proxy,
app.AccountKeeper,
app.GetSubspace(gridtypes.ModuleName),
)
app.CyberbankKeeper.Proxy.SetGridKeeper(&app.GridKeeper)
app.CyberbankKeeper.Proxy.SetAccountKeeper(app.AccountKeeper)
app.ResourcesKeeper = resourceskeeper.NewKeeper(
appCodec,
app.AccountKeeper,
app.CyberbankKeeper.Proxy,
app.BandwidthMeter,
app.GetSubspace(resourcestypes.ModuleName),
)
app.IBCKeeper = ibckeeper.NewKeeper(
appCodec,
keys[ibchost.StoreKey],
app.GetSubspace(ibchost.ModuleName),
app.StakingKeeper,
app.UpgradeKeeper,
scopedIBCKeeper,
)
app.TransferKeeper = ibctransferkeeper.NewKeeper(
appCodec,
keys[ibctransfertypes.StoreKey],
app.GetSubspace(ibctransfertypes.ModuleName),
app.IBCKeeper.ChannelKeeper,
app.IBCKeeper.ChannelKeeper,
&app.IBCKeeper.PortKeeper,
app.AccountKeeper,
app.CyberbankKeeper.Proxy,
scopedTransferKeeper,
)
app.DmnKeeper = dmnkeeper.NewKeeper(
appCodec,
keys[dmntypes.StoreKey],
app.CyberbankKeeper.Proxy,
app.AccountKeeper,
app.GetSubspace(dmntypes.ModuleName),
)
app.LiquidityKeeper = liquiditykeeper.NewKeeper(
appCodec,
keys[liquiditytypes.StoreKey],
app.GetSubspace(liquiditytypes.ModuleName),
app.CyberbankKeeper.Proxy,
app.AccountKeeper,
app.DistrKeeper,
)
wasmDir := filepath.Join(homePath, "wasm")
wasmConfig, err := wasm.ReadWasmConfig(appOpts)
if err != nil {
panic("error while reading wasm config: " + err.Error())
}
querier := wasmplugins.NewQuerier()
queries := map[string]wasmplugins.WasmQuerierInterface{
wasmplugins.WasmQueryRouteRank: rankwasm.NewWasmQuerier(app.RankKeeper),
wasmplugins.WasmQueryRouteGraph: graphwasm.NewWasmQuerier(*app.GraphKeeper),
wasmplugins.WasmQueryRouteDmn: dmnwasm.NewWasmQuerier(*app.DmnKeeper),
wasmplugins.WasmQueryRouteGrid: gridwasm.NewWasmQuerier(app.GridKeeper),
wasmplugins.WasmQueryRouteBandwidth: bandwidthwasm.NewWasmQuerier(app.BandwidthMeter),
wasmplugins.WasmQueryRouteLiquidity: liquidity_plugin.NewWasmQuerier(app.LiquidityKeeper),
}
querier.Queriers = queries
queryPlugins := &wasm.QueryPlugins{
Custom: querier.QueryCustom,
}
parser := wasmplugins.NewMsgParser()
parsers := map[string]wasmplugins.WasmMsgParserInterface{
wasmplugins.WasmMsgParserRouteGraph: graphwasm.NewWasmMsgParser(),
wasmplugins.WasmMsgParserRouteDmn: dmnwasm.NewWasmMsgParser(),
wasmplugins.WasmMsgParserRouteGrid: gridwasm.NewWasmMsgParser(),
wasmplugins.WasmMsgParserRouteResources: resourceswasm.NewWasmMsgParser(),
wasmplugins.WasmMsgParserLiquidity: liquidity_plugin.NewWasmMsgParser(),
}
parser.Parsers = parsers
customEncoders := &wasm.MessageEncoders{
Custom: parser.ParseCustom,
}
supportedFeatures := "iterator,staking,stargate,cyber"
wasmOpts = append(wasmOpts, wasmkeeper.WithQueryPlugins(queryPlugins))
wasmOpts = append(wasmOpts, wasmkeeper.WithMessageEncoders(customEncoders))
app.WasmKeeper = wasm.NewKeeper(
appCodec,
keys[wasm.StoreKey],
app.GetSubspace(wasm.ModuleName),
app.AccountKeeper,
app.CyberbankKeeper.Proxy,
app.StakingKeeper,
app.DistrKeeper,
app.IBCKeeper.ChannelKeeper,
&app.IBCKeeper.PortKeeper,
scopedWasmKeeper,
app.TransferKeeper,
app.MsgServiceRouter(),
app.GRPCQueryRouter(),
wasmDir,
wasmConfig,
supportedFeatures,
wasmOpts...,
)
app.DmnKeeper.SetWasmKeeper(app.WasmKeeper)
govRouter := govtypes.NewRouter()
govRouter.
AddRoute(govtypes.RouterKey, govtypes.ProposalHandler).
AddRoute(paramproposal.RouterKey, sdkparams.NewParamChangeProposalHandler(app.ParamsKeeper)).
AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)).
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)).
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper))
if len(enabledProposals) != 0 {
govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, enabledProposals))
}
app.GovKeeper = govkeeper.NewKeeper(
appCodec,
keys[govtypes.StoreKey],
app.GetSubspace(govtypes.ModuleName),
app.AccountKeeper,
app.CyberbankKeeper.Proxy,
&stakingKeeper,
govRouter,
)
transferModule := transfer.NewAppModule(app.TransferKeeper)
transferIBCModule := transfer.NewIBCModule(app.TransferKeeper)
ibcRouter := porttypes.NewRouter()
ibcRouter.
AddRoute(ibctransfertypes.ModuleName, transferIBCModule).
AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper))
app.IBCKeeper.SetRouter(ibcRouter)
evidenceKeeper := evidencekeeper.NewKeeper(
appCodec,
keys[evidencetypes.StoreKey],
&app.StakingKeeper,
app.SlashingKeeper,
)
app.EvidenceKeeper = *evidenceKeeper
var skipGenesisInvariants = cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants))
app.mm = module.NewManager(
genutil.NewAppModule(
app.AccountKeeper,
app.StakingKeeper,
app.BaseApp.DeliverTx,
encodingConfig.TxConfig,
),
auth.NewAppModule(appCodec, app.AccountKeeper, nil),
vesting.NewAppModule(app.AccountKeeper, app.CyberbankKeeper.Proxy),
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy),
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.StakingKeeper),
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.StakingKeeper),
stakingwrap.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy),
upgrade.NewAppModule(app.UpgradeKeeper),
evidence.NewAppModule(app.EvidenceKeeper),
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.FeeGrantKeeper, app.interfaceRegistry),
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.interfaceRegistry),
sdkparams.NewAppModule(app.ParamsKeeper),
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
ibc.NewAppModule(app.IBCKeeper),
transferModule,
liquidity.NewAppModule(appCodec, app.LiquidityKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.DistrKeeper),
wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy),
cyberbank.NewAppModule(appCodec, app.CyberbankKeeper),
bandwidth.NewAppModule(appCodec, app.AccountKeeper, app.BandwidthMeter),
graph.NewAppModule(
appCodec, app.GraphKeeper, app.IndexKeeper,
app.AccountKeeper, app.CyberbankKeeper, app.BandwidthMeter,
),
rank.NewAppModule(appCodec, app.RankKeeper),
grid.NewAppModule(appCodec, app.GridKeeper),
dmn.NewAppModule(appCodec, *app.DmnKeeper),
resources.NewAppModule(appCodec, app.ResourcesKeeper),
)
app.mm.SetOrderBeginBlockers(
upgradetypes.ModuleName,
capabilitytypes.ModuleName,
stakingtypes.ModuleName,
liquiditytypes.ModuleName,
distrtypes.ModuleName,
slashingtypes.ModuleName,
minttypes.ModuleName,
evidencetypes.ModuleName,
dmntypes.ModuleName,
authtypes.ModuleName,
authz.ModuleName,
banktypes.ModuleName,
bandwidthtypes.ModuleName,
crisistypes.ModuleName,
cyberbanktypes.ModuleName,
feegrant.ModuleName,
genutiltypes.ModuleName,
govtypes.ModuleName,
graphtypes.ModuleName,
gridtypes.ModuleName,
ibctransfertypes.ModuleName,
ibchost.ModuleName,
paramstypes.ModuleName,
ranktypes.ModuleName,
resourcestypes.ModuleName,
vestingtypes.ModuleName,
wasm.ModuleName,
)
app.mm.SetOrderEndBlockers(
crisistypes.ModuleName,
govtypes.ModuleName,
stakingtypes.ModuleName,
liquiditytypes.ModuleName,
cyberbanktypes.ModuleName,
bandwidthtypes.ModuleName,
graphtypes.ModuleName,
ranktypes.ModuleName,
authtypes.ModuleName,
authz.ModuleName,
banktypes.ModuleName,
capabilitytypes.ModuleName,
distrtypes.ModuleName,
dmntypes.ModuleName,
evidencetypes.ModuleName,
feegrant.ModuleName,
genutiltypes.ModuleName,
gridtypes.ModuleName,
ibchost.ModuleName,
ibctransfertypes.ModuleName,
minttypes.ModuleName,
paramstypes.ModuleName,
resourcestypes.ModuleName,
slashingtypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
wasm.ModuleName,
)
app.mm.SetOrderInitGenesis(
capabilitytypes.ModuleName,
banktypes.ModuleName,
distrtypes.ModuleName,
stakingtypes.ModuleName,
slashingtypes.ModuleName,
govtypes.ModuleName,
minttypes.ModuleName,
crisistypes.ModuleName,
ibctransfertypes.ModuleName,
ibchost.ModuleName,
evidencetypes.ModuleName,
liquiditytypes.ModuleName,
feegrant.ModuleName,
authz.ModuleName,
authtypes.ModuleName,
genutiltypes.ModuleName,
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
wasm.ModuleName,
bandwidthtypes.ModuleName,
ranktypes.ModuleName,
gridtypes.ModuleName,
resourcestypes.ModuleName,
dmntypes.ModuleName,
graphtypes.ModuleName,
cyberbanktypes.ModuleName, )
app.mm.RegisterInvariants(&app.CrisisKeeper)
app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter())
delete(app.mm.Modules, "bank")
app.mm.RegisterServices(app.configurator)
app.mm.Modules["bank"] = bank.NewAppModule(appCodec, app.CyberbankKeeper.Proxy, app.AccountKeeper)
banktypes.RegisterMsgServer(app.configurator.MsgServer(), bankkeeper.NewMsgServerImpl(app.CyberbankKeeper.Proxy))
banktypes.RegisterQueryServer(app.configurator.QueryServer(), app.CyberbankKeeper.Proxy)
m := bankkeeper.NewMigrator(app.BankKeeper.(bankkeeper.BaseKeeper))
app.configurator.RegisterMigration(banktypes.ModuleName, 1, m.Migrate1to2)
app.MountKVStores(keys)
app.MountTransientStores(tkeys)
app.MountMemoryStores(memKeys)
anteHandler, err := NewAnteHandler(
HandlerOptions{
HandlerBaseOptions: HandlerBaseOptions{
AccountKeeper: app.AccountKeeper,
BankKeeper: app.CyberbankKeeper.Proxy,
FeegrantKeeper: app.FeeGrantKeeper,
BandwidthMeter: app.BandwidthMeter,
SignModeHandler: encodingConfig.TxConfig.SignModeHandler(),
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
},
IBCKeeper: app.IBCKeeper,
WasmConfig: &wasmConfig,
TXCounterStoreKey: keys[wasm.StoreKey],
},
)
if err != nil {
panic(fmt.Errorf("failed to create AnteHandler: %s", err))
}
app.SetAnteHandler(anteHandler)
app.SetInitChainer(app.InitChainer)
app.SetBeginBlocker(app.BeginBlocker)
app.SetEndBlocker(app.EndBlocker)
app.UpgradeKeeper.SetUpgradeHandler(
upgradeName,
func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
},
)
upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()
if err != nil {
panic(fmt.Sprintf("failed to read upgrade info from disk %s", err))
}
if upgradeInfo.Name == upgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
storeUpgrades := store.StoreUpgrades{}
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades))
}
app.ScopedIBCKeeper = scopedIBCKeeper
app.ScopedTransferKeeper = scopedTransferKeeper
app.ScopedWasmKeeper = scopedWasmKeeper
if loadLatest {
if err := app.LoadLatestVersion(); err != nil {
tmos.Exit(fmt.Sprintf("failed to load latest version: %s", err))
}
freshCtx := app.BaseApp.NewContext(true, tmproto.Header{})
freshCtx = freshCtx.WithBlockHeight(int64(app.RankKeeper.GetLatestBlockNumber(freshCtx)))
start := time.Now()
app.BaseApp.Logger().Info("Loading the brain state")
if app.LastBlockHeight() >= 1 {
calculationPeriod := app.RankKeeper.GetParams(freshCtx).CalculationPeriod
rankRoundBlockNumber := (freshCtx.BlockHeight() / calculationPeriod) * calculationPeriod
if rankRoundBlockNumber == 0 && freshCtx.BlockHeight() >= 1 {
rankRoundBlockNumber = 1
}
rankCtx, err := utils.NewContextWithMSVersion(db, rankRoundBlockNumber, keys)
if err != nil {
tmos.Exit(err.Error())
}
app.CyberbankKeeper.LoadState(rankCtx, freshCtx)
app.IndexKeeper.LoadState(rankCtx, freshCtx)
app.BandwidthMeter.LoadState(freshCtx)
app.GraphKeeper.LoadNeudeg(rankCtx, freshCtx)
app.RankKeeper.LoadState(freshCtx)
app.RankKeeper.StartRankCalculation(freshCtx)
} else {
app.CyberbankKeeper.LoadState(freshCtx, freshCtx)
app.IndexKeeper.LoadState(freshCtx, freshCtx)
app.BandwidthMeter.InitState()
app.GraphKeeper.LoadNeudeg(freshCtx, freshCtx)
app.RankKeeper.LoadState(freshCtx)
}
if err := app.WasmKeeper.InitializePinnedCodes(freshCtx); err != nil {
tmos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err))
}
app.BaseApp.Logger().Info(
"Cyber Consensus Supercomputer is started!",
"duration", time.Since(start).String(),
)
}
return app
}
func (app *App) Name() string { return app.BaseApp.Name() }
func (app *App) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock {
return app.mm.BeginBlock(ctx, req)
}
func (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {
return app.mm.EndBlock(ctx, req)
}
func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {
var genesisState GenesisState
if err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil {
panic(err)
}
var bankGenesisState banktypes.GenesisState
app.appCodec.MustUnmarshalJSON(genesisState["bank"], &bankGenesisState)
app.BandwidthMeter.AddToDesirableBandwidth(ctx, bankGenesisState.Supply.AmountOf(ctypes.VOLT).Uint64())
app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap())
resp := app.mm.InitGenesis(ctx, app.appCodec, genesisState)
app.mm.Modules[cyberbanktypes.ModuleName].InitGenesis(ctx, app.appCodec, nil)
return resp
}
func (app *App) LoadHeight(height int64) error {
return app.LoadVersion(height)
}
func (app *App) ModuleAccountAddrs() map[string]bool {
modAccAddrs := make(map[string]bool)
for acc := range maccPerms {
modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true
}
return modAccAddrs
}
func (app *App) BlockedAddrs() map[string]bool {
blockedAddrs := make(map[string]bool)
for acc := range maccPerms {
blockedAddrs[authtypes.NewModuleAddress(acc).String()] = !allowedReceivingModAcc[acc]
}
return blockedAddrs
}
func (app *App) LegacyAmino() *codec.LegacyAmino {
return app.legacyAmino
}
func (app *App) AppCodec() codec.Codec {
return app.appCodec
}
func (app *App) InterfaceRegistry() types.InterfaceRegistry {
return app.interfaceRegistry
}
func (app *App) GetKey(storeKey string) *sdk.KVStoreKey {
return app.keys[storeKey]
}
func (app *App) GetTKey(storeKey string) *sdk.TransientStoreKey {
return app.tkeys[storeKey]
}
func (app *App) GetMemKey(storeKey string) *sdk.MemoryStoreKey {
return app.memKeys[storeKey]
}
func (app *App) GetSubspace(moduleName string) paramstypes.Subspace {
subspace, _ := app.ParamsKeeper.GetSubspace(moduleName)
return subspace
}
func (app *App) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
clientCtx := apiSvr.ClientCtx
rpc.RegisterRoutes(clientCtx, apiSvr.Router)
authrest.RegisterTxRoutes(clientCtx, apiSvr.Router)
authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router)
ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
if apiConfig.Swagger {
RegisterSwaggerAPI(apiSvr.Router)
}
}
func (app *App) RegisterTxService(clientCtx client.Context) {
authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry)
}
func (app *App) RegisterTendermintService(clientCtx client.Context) {
tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)
}
func RegisterSwaggerAPI(rtr *mux.Router) {
statikFS, err := fs.New()
if err != nil {
panic(err)
}
staticServer := http.FileServer(statikFS)
rtr.PathPrefix("/swagger/").Handler(http.StripPrefix("/swagger/", staticServer))
}
func GetMaccPerms() map[string][]string {
dupMaccPerms := make(map[string][]string)
for k, v := range maccPerms {
dupMaccPerms[k] = v
}
return dupMaccPerms
}
func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper {
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
paramsKeeper.Subspace(authtypes.ModuleName)
paramsKeeper.Subspace(banktypes.ModuleName)
paramsKeeper.Subspace(stakingtypes.ModuleName)
paramsKeeper.Subspace(minttypes.ModuleName)
paramsKeeper.Subspace(distrtypes.ModuleName)
paramsKeeper.Subspace(slashingtypes.ModuleName)
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
paramsKeeper.Subspace(crisistypes.ModuleName)
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
paramsKeeper.Subspace(ibchost.ModuleName)
paramsKeeper.Subspace(liquiditytypes.ModuleName)
paramsKeeper.Subspace(wasm.ModuleName)
paramsKeeper.Subspace(bandwidthtypes.ModuleName)
paramsKeeper.Subspace(ranktypes.ModuleName)
paramsKeeper.Subspace(gridtypes.ModuleName)
paramsKeeper.Subspace(dmntypes.ModuleName)
paramsKeeper.Subspace(resourcestypes.ModuleName)
return paramsKeeper
}
func MakeCodecs() (codec.Codec, *codec.LegacyAmino) {
config := MakeEncodingConfig()
return config.Marshaler, config.Amino
}