github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/app.go (about) 1 package app 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "sync" 8 9 "github.com/fibonacci-chain/fbc/x/vmbridge" 10 11 ica "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts" 12 icacontroller "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/controller" 13 icahost "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/host" 14 "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/common" 15 "github.com/fibonacci-chain/fbc/x/icamauth" 16 17 ibccommon "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/common" 18 19 icacontrollertypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/controller/types" 20 icahosttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/host/types" 21 icamauthtypes "github.com/fibonacci-chain/fbc/x/icamauth/types" 22 23 icacontrollerkeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/controller/keeper" 24 icahostkeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/host/keeper" 25 icamauthkeeper "github.com/fibonacci-chain/fbc/x/icamauth/keeper" 26 27 ibcfeekeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee/keeper" 28 29 icatypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/types" 30 ibcfeetypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee/types" 31 32 ibcfee "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee" 33 "github.com/spf13/cobra" 34 "github.com/spf13/viper" 35 "google.golang.org/grpc/encoding" 36 "google.golang.org/grpc/encoding/proto" 37 38 "github.com/fibonacci-chain/fbc/app/utils/appstatus" 39 40 "github.com/fibonacci-chain/fbc/app/ante" 41 fbexchaincodec "github.com/fibonacci-chain/fbc/app/codec" 42 appconfig "github.com/fibonacci-chain/fbc/app/config" 43 "github.com/fibonacci-chain/fbc/app/refund" 44 fbchain "github.com/fibonacci-chain/fbc/app/types" 45 "github.com/fibonacci-chain/fbc/app/utils/sanity" 46 bam "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/baseapp" 47 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 48 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/server" 49 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/simapp" 50 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/mpt" 51 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 52 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/module" 53 upgradetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/upgrade" 54 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version" 55 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 56 authtypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/types" 57 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank" 58 capabilityModule "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/capability" 59 capabilitykeeper "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/capability/keeper" 60 capabilitytypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/capability/types" 61 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/crisis" 62 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint" 63 govclient "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/client" 64 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 65 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/upgrade" 66 "github.com/fibonacci-chain/fbc/libs/iavl" 67 ibctransfer "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/transfer" 68 ibctransferkeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/transfer/keeper" 69 ibctransfertypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/transfer/types" 70 ibc "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core" 71 ibcclient "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client" 72 "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client/client" 73 ibcclienttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client/types" 74 ibcporttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/05-port/types" 75 ibchost "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/24-host" 76 "github.com/fibonacci-chain/fbc/libs/system" 77 "github.com/fibonacci-chain/fbc/libs/system/trace" 78 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 79 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 80 tmos "github.com/fibonacci-chain/fbc/libs/tendermint/libs/os" 81 sm "github.com/fibonacci-chain/fbc/libs/tendermint/state" 82 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 83 dbm "github.com/fibonacci-chain/fbc/libs/tm-db" 84 "github.com/fibonacci-chain/fbc/x/ammswap" 85 commonversion "github.com/fibonacci-chain/fbc/x/common/version" 86 "github.com/fibonacci-chain/fbc/x/dex" 87 dexclient "github.com/fibonacci-chain/fbc/x/dex/client" 88 distr "github.com/fibonacci-chain/fbc/x/distribution" 89 "github.com/fibonacci-chain/fbc/x/erc20" 90 erc20client "github.com/fibonacci-chain/fbc/x/erc20/client" 91 "github.com/fibonacci-chain/fbc/x/evidence" 92 "github.com/fibonacci-chain/fbc/x/evm" 93 evmclient "github.com/fibonacci-chain/fbc/x/evm/client" 94 evmtypes "github.com/fibonacci-chain/fbc/x/evm/types" 95 "github.com/fibonacci-chain/fbc/x/farm" 96 farmclient "github.com/fibonacci-chain/fbc/x/farm/client" 97 "github.com/fibonacci-chain/fbc/x/feesplit" 98 fsclient "github.com/fibonacci-chain/fbc/x/feesplit/client" 99 "github.com/fibonacci-chain/fbc/x/genutil" 100 "github.com/fibonacci-chain/fbc/x/gov" 101 "github.com/fibonacci-chain/fbc/x/gov/keeper" 102 "github.com/fibonacci-chain/fbc/x/infura" 103 "github.com/fibonacci-chain/fbc/x/order" 104 "github.com/fibonacci-chain/fbc/x/params" 105 paramsclient "github.com/fibonacci-chain/fbc/x/params/client" 106 "github.com/fibonacci-chain/fbc/x/slashing" 107 "github.com/fibonacci-chain/fbc/x/staking" 108 "github.com/fibonacci-chain/fbc/x/token" 109 "github.com/fibonacci-chain/fbc/x/wasm" 110 wasmclient "github.com/fibonacci-chain/fbc/x/wasm/client" 111 wasmkeeper "github.com/fibonacci-chain/fbc/x/wasm/keeper" 112 ) 113 114 func init() { 115 // set the address prefixes 116 config := sdk.GetConfig() 117 fbchain.SetBech32Prefixes(config) 118 fbchain.SetBip44CoinType(config) 119 } 120 121 const ( 122 appName = "FBChain" 123 ) 124 125 var ( 126 // DefaultCLIHome sets the default home directories for the application CLI 127 DefaultCLIHome = os.ExpandEnv("$HOME/.fbchaincli") 128 129 // DefaultNodeHome sets the folder where the applcation data and configuration will be stored 130 DefaultNodeHome = os.ExpandEnv("$HOME/.fbchaind") 131 132 // ModuleBasics defines the module BasicManager is in charge of setting up basic, 133 // non-dependant module elements, such as codec registration 134 // and genesis verification. 135 ModuleBasics = module.NewBasicManager( 136 auth.AppModuleBasic{}, 137 supply.AppModuleBasic{}, 138 genutil.AppModuleBasic{}, 139 bank.AppModuleBasic{}, 140 staking.AppModuleBasic{}, 141 mint.AppModuleBasic{}, 142 distr.AppModuleBasic{}, 143 gov.NewAppModuleBasic( 144 paramsclient.ProposalHandler, 145 paramsclient.UpgradeProposalHandler, 146 distr.CommunityPoolSpendProposalHandler, 147 distr.ChangeDistributionTypeProposalHandler, 148 distr.WithdrawRewardEnabledProposalHandler, 149 distr.RewardTruncatePrecisionProposalHandler, 150 dexclient.DelistProposalHandler, farmclient.ManageWhiteListProposalHandler, 151 evmclient.ManageContractDeploymentWhitelistProposalHandler, 152 evmclient.ManageContractBlockedListProposalHandler, 153 evmclient.ManageContractMethodGuFactorProposalHandler, 154 evmclient.ManageContractMethodBlockedListProposalHandler, 155 evmclient.ManageSysContractAddressProposalHandler, 156 govclient.ManageTreasuresProposalHandler, 157 govclient.ModifyNextBlockUpdateProposalHandler, 158 erc20client.TokenMappingProposalHandler, 159 erc20client.ProxyContractRedirectHandler, 160 erc20client.ContractTemplateProposalHandler, 161 client.UpdateClientProposalHandler, 162 fsclient.FeeSplitSharesProposalHandler, 163 wasmclient.MigrateContractProposalHandler, 164 wasmclient.UpdateContractAdminProposalHandler, 165 wasmclient.ClearContractAdminProposalHandler, 166 wasmclient.PinCodesProposalHandler, 167 wasmclient.UnpinCodesProposalHandler, 168 wasmclient.UpdateDeploymentWhitelistProposalHandler, 169 wasmclient.UpdateWASMContractMethodBlockedListProposalHandler, 170 ), 171 params.AppModuleBasic{}, 172 crisis.AppModuleBasic{}, 173 slashing.AppModuleBasic{}, 174 evidence.AppModuleBasic{}, 175 upgrade.AppModuleBasic{}, 176 evm.AppModuleBasic{}, 177 token.AppModuleBasic{}, 178 dex.AppModuleBasic{}, 179 order.AppModuleBasic{}, 180 ammswap.AppModuleBasic{}, 181 farm.AppModuleBasic{}, 182 infura.AppModuleBasic{}, 183 capabilityModule.AppModuleBasic{}, 184 ibc.AppModuleBasic{}, 185 ibctransfer.AppModuleBasic{}, 186 erc20.AppModuleBasic{}, 187 wasm.AppModuleBasic{}, 188 feesplit.AppModuleBasic{}, 189 ica.AppModuleBasic{}, 190 ibcfee.AppModuleBasic{}, 191 icamauth.AppModuleBasic{}, 192 ) 193 194 // module account permissions 195 maccPerms = map[string][]string{ 196 auth.FeeCollectorName: nil, 197 distr.ModuleName: nil, 198 mint.ModuleName: {supply.Minter}, 199 staking.BondedPoolName: {supply.Burner, supply.Staking}, 200 staking.NotBondedPoolName: {supply.Burner, supply.Staking}, 201 gov.ModuleName: nil, 202 token.ModuleName: {supply.Minter, supply.Burner}, 203 dex.ModuleName: nil, 204 order.ModuleName: nil, 205 ammswap.ModuleName: {supply.Minter, supply.Burner}, 206 farm.ModuleName: nil, 207 farm.YieldFarmingAccount: nil, 208 farm.MintFarmingAccount: {supply.Burner}, 209 ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, 210 erc20.ModuleName: {authtypes.Minter, authtypes.Burner}, 211 wasm.ModuleName: nil, 212 feesplit.ModuleName: nil, 213 ibcfeetypes.ModuleName: nil, 214 icatypes.ModuleName: nil, 215 } 216 217 onceLog sync.Once 218 ) 219 220 var _ simapp.App = (*FBChainApp)(nil) 221 222 // FBChainApp implements an extended ABCI application. It is an application 223 // that may process transactions through Ethereum's EVM running atop of 224 // Tendermint consensus. 225 type FBChainApp struct { 226 *bam.BaseApp 227 228 invCheckPeriod uint 229 230 // keys to access the substores 231 keys map[string]*sdk.KVStoreKey 232 tkeys map[string]*sdk.TransientStoreKey 233 234 // subspaces 235 subspaces map[string]params.Subspace 236 237 // keepers 238 AccountKeeper auth.AccountKeeper 239 BankKeeper bank.Keeper 240 SupplyKeeper supply.Keeper 241 StakingKeeper staking.Keeper 242 SlashingKeeper slashing.Keeper 243 MintKeeper mint.Keeper 244 DistrKeeper distr.Keeper 245 GovKeeper gov.Keeper 246 CrisisKeeper crisis.Keeper 247 UpgradeKeeper upgrade.Keeper 248 ParamsKeeper params.Keeper 249 EvidenceKeeper evidence.Keeper 250 EvmKeeper *evm.Keeper 251 TokenKeeper token.Keeper 252 DexKeeper dex.Keeper 253 OrderKeeper order.Keeper 254 SwapKeeper ammswap.Keeper 255 FarmKeeper farm.Keeper 256 WasmKeeper wasm.Keeper 257 WasmPermissionKeeper wasm.ContractOpsKeeper 258 InfuraKeeper infura.Keeper 259 FeeSplitKeeper feesplit.Keeper 260 261 // the module manager 262 mm *module.Manager 263 264 // simulation manager 265 sm *module.SimulationManager 266 267 configurator module.Configurator 268 // ibc 269 ScopedIBCKeeper capabilitykeeper.ScopedKeeper 270 ScopedTransferKeeper capabilitykeeper.ScopedKeeper 271 ScopedIBCMockKeeper capabilitykeeper.ScopedKeeper 272 TransferKeeper ibctransferkeeper.Keeper 273 CapabilityKeeper *capabilitykeeper.Keeper 274 IBCKeeper *ibc.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly 275 IBCFeeKeeper ibcfeekeeper.Keeper 276 marshal *codec.CodecProxy 277 heightTasks map[int64]*upgradetypes.HeightTasks 278 Erc20Keeper erc20.Keeper 279 ICAMauthKeeper icamauthkeeper.Keeper 280 ICAControllerKeeper icacontrollerkeeper.Keeper 281 ICAHostKeeper icahostkeeper.Keeper 282 VMBridgeKeeper *vmbridge.Keeper 283 284 WasmHandler wasmkeeper.HandlerOption 285 } 286 287 // NewFBChainApp returns a reference to a new initialized FBChain application. 288 func NewFBChainApp( 289 logger log.Logger, 290 db dbm.DB, 291 traceStore io.Writer, 292 loadLatest bool, 293 skipUpgradeHeights map[int64]bool, 294 invCheckPeriod uint, 295 baseAppOptions ...func(*bam.BaseApp), 296 ) *FBChainApp { 297 logger.Info("Starting "+system.ChainName, 298 "GenesisHeight", tmtypes.GetStartBlockHeight(), 299 "MercuryHeight", tmtypes.GetMercuryHeight(), 300 "VenusHeight", tmtypes.GetVenusHeight(), 301 "Venus1Height", tmtypes.GetVenus1Height(), 302 "Venus2Height", tmtypes.GetVenus2Height(), 303 "Venus3Height", tmtypes.GetVenus3Height(), 304 "Veneus4Height", tmtypes.GetVenus4Height(), 305 "Veneus5Height", tmtypes.GetVenus5Height(), 306 "EarthHeight", tmtypes.GetEarthHeight(), 307 "MarsHeight", tmtypes.GetMarsHeight(), 308 "JupiterHeight", tmtypes.GetJupiterHeight(), 309 "CometHeight", tmtypes.GetCometHeight(), 310 ) 311 onceLog.Do(func() { 312 iavl.SetLogger(logger.With("module", "iavl")) 313 logStartingFlags(logger) 314 }) 315 316 codecProxy, interfaceReg := fbexchaincodec.MakeCodecSuit(ModuleBasics) 317 vmbridge.RegisterInterface(interfaceReg) 318 // NOTE we use custom fbchaintransaction decoder that supports the sdk.Tx interface instead of sdk.StdTx 319 bApp := bam.NewBaseApp(appName, logger, db, evm.TxDecoder(codecProxy), baseAppOptions...) 320 321 bApp.SetCommitMultiStoreTracer(traceStore) 322 bApp.SetAppVersion(version.Version) 323 bApp.SetStartLogHandler(trace.StartTxLog) 324 bApp.SetEndLogHandler(trace.StopTxLog) 325 326 bApp.SetInterfaceRegistry(interfaceReg) 327 328 keys := sdk.NewKVStoreKeys( 329 bam.MainStoreKey, auth.StoreKey, staking.StoreKey, 330 supply.StoreKey, mint.StoreKey, distr.StoreKey, slashing.StoreKey, 331 gov.StoreKey, params.StoreKey, upgrade.StoreKey, evidence.StoreKey, 332 evm.StoreKey, token.StoreKey, token.KeyLock, dex.StoreKey, dex.TokenPairStoreKey, 333 order.OrderStoreKey, ammswap.StoreKey, farm.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, 334 ibchost.StoreKey, 335 erc20.StoreKey, 336 mpt.StoreKey, 337 wasm.StoreKey, 338 feesplit.StoreKey, 339 icacontrollertypes.StoreKey, icahosttypes.StoreKey, ibcfeetypes.StoreKey, 340 icamauthtypes.StoreKey, 341 ) 342 343 tkeys := sdk.NewTransientStoreKeys(params.TStoreKey) 344 memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) 345 346 app := &FBChainApp{ 347 BaseApp: bApp, 348 invCheckPeriod: invCheckPeriod, 349 keys: keys, 350 tkeys: tkeys, 351 subspaces: make(map[string]params.Subspace), 352 heightTasks: make(map[int64]*upgradetypes.HeightTasks), 353 } 354 bApp.SetInterceptors(makeInterceptors()) 355 356 // init params keeper and subspaces 357 app.ParamsKeeper = params.NewKeeper(codecProxy.GetCdc(), keys[params.StoreKey], tkeys[params.TStoreKey], logger) 358 app.subspaces[auth.ModuleName] = app.ParamsKeeper.Subspace(auth.DefaultParamspace) 359 app.subspaces[bank.ModuleName] = app.ParamsKeeper.Subspace(bank.DefaultParamspace) 360 app.subspaces[staking.ModuleName] = app.ParamsKeeper.Subspace(staking.DefaultParamspace) 361 app.subspaces[mint.ModuleName] = app.ParamsKeeper.Subspace(mint.DefaultParamspace) 362 app.subspaces[distr.ModuleName] = app.ParamsKeeper.Subspace(distr.DefaultParamspace) 363 app.subspaces[slashing.ModuleName] = app.ParamsKeeper.Subspace(slashing.DefaultParamspace) 364 app.subspaces[gov.ModuleName] = app.ParamsKeeper.Subspace(gov.DefaultParamspace) 365 app.subspaces[crisis.ModuleName] = app.ParamsKeeper.Subspace(crisis.DefaultParamspace) 366 app.subspaces[evidence.ModuleName] = app.ParamsKeeper.Subspace(evidence.DefaultParamspace) 367 app.subspaces[evm.ModuleName] = app.ParamsKeeper.Subspace(evm.DefaultParamspace) 368 app.subspaces[token.ModuleName] = app.ParamsKeeper.Subspace(token.DefaultParamspace) 369 app.subspaces[dex.ModuleName] = app.ParamsKeeper.Subspace(dex.DefaultParamspace) 370 app.subspaces[order.ModuleName] = app.ParamsKeeper.Subspace(order.DefaultParamspace) 371 app.subspaces[ammswap.ModuleName] = app.ParamsKeeper.Subspace(ammswap.DefaultParamspace) 372 app.subspaces[farm.ModuleName] = app.ParamsKeeper.Subspace(farm.DefaultParamspace) 373 app.subspaces[ibchost.ModuleName] = app.ParamsKeeper.Subspace(ibchost.ModuleName) 374 app.subspaces[ibctransfertypes.ModuleName] = app.ParamsKeeper.Subspace(ibctransfertypes.ModuleName) 375 app.subspaces[erc20.ModuleName] = app.ParamsKeeper.Subspace(erc20.DefaultParamspace) 376 app.subspaces[wasm.ModuleName] = app.ParamsKeeper.Subspace(wasm.ModuleName) 377 app.subspaces[feesplit.ModuleName] = app.ParamsKeeper.Subspace(feesplit.ModuleName) 378 app.subspaces[icacontrollertypes.SubModuleName] = app.ParamsKeeper.Subspace(icacontrollertypes.SubModuleName) 379 app.subspaces[icahosttypes.SubModuleName] = app.ParamsKeeper.Subspace(icahosttypes.SubModuleName) 380 381 //proxy := codec.NewMarshalProxy(cc, cdc) 382 app.marshal = codecProxy 383 // use custom FBchain account for contracts 384 app.AccountKeeper = auth.NewAccountKeeper( 385 codecProxy.GetCdc(), keys[auth.StoreKey], keys[mpt.StoreKey], app.subspaces[auth.ModuleName], fbchain.ProtoAccount, 386 ) 387 388 bankKeeper := bank.NewBaseKeeperWithMarshal( 389 &app.AccountKeeper, codecProxy, app.subspaces[bank.ModuleName], app.ModuleAccountAddrs(), 390 ) 391 app.BankKeeper = &bankKeeper 392 app.ParamsKeeper.SetBankKeeper(app.BankKeeper) 393 app.SupplyKeeper = supply.NewKeeper( 394 codecProxy.GetCdc(), keys[supply.StoreKey], &app.AccountKeeper, bank.NewBankKeeperAdapter(app.BankKeeper), maccPerms, 395 ) 396 397 stakingKeeper := staking.NewKeeper( 398 codecProxy, keys[staking.StoreKey], app.SupplyKeeper, app.subspaces[staking.ModuleName], 399 ) 400 app.ParamsKeeper.SetStakingKeeper(stakingKeeper) 401 app.MintKeeper = mint.NewKeeper( 402 codecProxy.GetCdc(), keys[mint.StoreKey], app.subspaces[mint.ModuleName], &stakingKeeper, 403 app.SupplyKeeper, auth.FeeCollectorName, farm.MintFarmingAccount, 404 ) 405 app.DistrKeeper = distr.NewKeeper( 406 codecProxy.GetCdc(), keys[distr.StoreKey], app.subspaces[distr.ModuleName], &stakingKeeper, 407 app.SupplyKeeper, auth.FeeCollectorName, app.ModuleAccountAddrs(), 408 ) 409 app.SlashingKeeper = slashing.NewKeeper( 410 codecProxy.GetCdc(), keys[slashing.StoreKey], &stakingKeeper, app.subspaces[slashing.ModuleName], 411 ) 412 app.CrisisKeeper = crisis.NewKeeper( 413 app.subspaces[crisis.ModuleName], invCheckPeriod, app.SupplyKeeper, auth.FeeCollectorName, 414 ) 415 app.UpgradeKeeper = upgrade.NewKeeper(skipUpgradeHeights, keys[upgrade.StoreKey], app.marshal.GetCdc()) 416 app.ParamsKeeper.RegisterSignal(evmtypes.SetEvmParamsNeedUpdate) 417 app.EvmKeeper = evm.NewKeeper( 418 app.marshal.GetCdc(), keys[evm.StoreKey], app.subspaces[evm.ModuleName], &app.AccountKeeper, app.SupplyKeeper, app.BankKeeper, &stakingKeeper, logger) 419 (&bankKeeper).SetInnerTxKeeper(app.EvmKeeper) 420 421 app.TokenKeeper = token.NewKeeper(app.BankKeeper, app.subspaces[token.ModuleName], auth.FeeCollectorName, app.SupplyKeeper, 422 keys[token.StoreKey], keys[token.KeyLock], app.marshal.GetCdc(), false, &app.AccountKeeper) 423 424 app.DexKeeper = dex.NewKeeper(auth.FeeCollectorName, app.SupplyKeeper, app.subspaces[dex.ModuleName], app.TokenKeeper, &stakingKeeper, 425 app.BankKeeper, app.keys[dex.StoreKey], app.keys[dex.TokenPairStoreKey], app.marshal.GetCdc()) 426 427 app.OrderKeeper = order.NewKeeper( 428 app.TokenKeeper, app.SupplyKeeper, app.DexKeeper, app.subspaces[order.ModuleName], auth.FeeCollectorName, 429 app.keys[order.OrderStoreKey], app.marshal.GetCdc(), false, orderMetrics) 430 431 app.SwapKeeper = ammswap.NewKeeper(app.SupplyKeeper, app.TokenKeeper, app.marshal.GetCdc(), app.keys[ammswap.StoreKey], app.subspaces[ammswap.ModuleName]) 432 433 app.FarmKeeper = farm.NewKeeper(auth.FeeCollectorName, app.SupplyKeeper, app.TokenKeeper, app.SwapKeeper, *app.EvmKeeper, app.subspaces[farm.StoreKey], 434 app.keys[farm.StoreKey], app.marshal.GetCdc()) 435 app.InfuraKeeper = infura.NewKeeper(app.EvmKeeper, logger, streamMetrics) 436 // create evidence keeper with router 437 evidenceKeeper := evidence.NewKeeper( 438 codecProxy.GetCdc(), keys[evidence.StoreKey], app.subspaces[evidence.ModuleName], &app.StakingKeeper, app.SlashingKeeper, 439 ) 440 evidenceRouter := evidence.NewRouter() 441 evidenceKeeper.SetRouter(evidenceRouter) 442 app.EvidenceKeeper = *evidenceKeeper 443 444 // add capability keeper and ScopeToModule for ibc module 445 app.CapabilityKeeper = capabilitykeeper.NewKeeper(codecProxy, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey]) 446 scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) 447 scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) 448 // NOTE: the IBC mock keeper and application module is used only for testing core IBC. Do 449 // note replicate if you do not need to test core IBC or light clients. 450 scopedIBCMockKeeper := app.CapabilityKeeper.ScopeToModule("mock") 451 scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) 452 scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) 453 scopedICAMauthKeeper := app.CapabilityKeeper.ScopeToModule(icamauthtypes.ModuleName) 454 455 v2keeper := ibc.NewKeeper( 456 codecProxy, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &stakingKeeper, app.UpgradeKeeper, &scopedIBCKeeper, interfaceReg, 457 ) 458 v4Keeper := ibc.NewV4Keeper(v2keeper) 459 facadedKeeper := ibc.NewFacadedKeeper(v2keeper) 460 facadedKeeper.RegisterKeeper(ibccommon.DefaultFactory(tmtypes.HigherThanVenus4, ibc.IBCV4, v4Keeper)) 461 app.IBCKeeper = facadedKeeper 462 supplyKeeperAdapter := supply.NewSupplyKeeperAdapter(app.SupplyKeeper) 463 // Create Transfer Keepers 464 app.TransferKeeper = ibctransferkeeper.NewKeeper( 465 codecProxy, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), 466 v2keeper.ChannelKeeper, &v2keeper.PortKeeper, 467 app.SupplyKeeper, supplyKeeperAdapter, scopedTransferKeeper, interfaceReg, 468 ) 469 ibctransfertypes.SetMarshal(codecProxy) 470 app.IBCFeeKeeper = ibcfeekeeper.NewKeeper(codecProxy, keys[ibcfeetypes.StoreKey], app.GetSubspace(ibcfeetypes.ModuleName), 471 v2keeper.ChannelKeeper, // may be replaced with IBC middleware 472 v2keeper.ChannelKeeper, 473 &v2keeper.PortKeeper, app.SupplyKeeper, supplyKeeperAdapter, 474 ) 475 476 // ICA Controller keeper 477 app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( 478 codecProxy, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), 479 app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack 480 app.IBCKeeper.V2Keeper.ChannelKeeper, &app.IBCKeeper.V2Keeper.PortKeeper, 481 scopedICAControllerKeeper, app.MsgServiceRouter(), 482 ) 483 484 // ICA Host keeper 485 app.ICAHostKeeper = icahostkeeper.NewKeeper( 486 codecProxy, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), 487 app.IBCKeeper.V2Keeper.ChannelKeeper, &app.IBCKeeper.V2Keeper.PortKeeper, 488 supplyKeeperAdapter, scopedICAHostKeeper, app.MsgServiceRouter(), 489 ) 490 491 app.ICAMauthKeeper = icamauthkeeper.NewKeeper( 492 codecProxy, 493 keys[icamauthtypes.StoreKey], 494 app.ICAControllerKeeper, 495 scopedICAMauthKeeper, 496 ) 497 498 app.Erc20Keeper = erc20.NewKeeper(app.marshal.GetCdc(), app.keys[erc20.ModuleName], app.subspaces[erc20.ModuleName], 499 app.AccountKeeper, app.SupplyKeeper, app.BankKeeper, app.EvmKeeper, app.TransferKeeper) 500 501 app.FeeSplitKeeper = feesplit.NewKeeper( 502 app.keys[feesplit.StoreKey], app.marshal.GetCdc(), app.subspaces[feesplit.ModuleName], 503 app.EvmKeeper, app.SupplyKeeper, app.AccountKeeper) 504 app.ParamsKeeper.RegisterSignal(feesplit.SetParamsNeedUpdate) 505 506 //wasm keeper 507 wasmDir := wasm.WasmDir() 508 wasmConfig := wasm.WasmConfig() 509 510 // The last arguments can contain custom message handlers, and custom query handlers, 511 // if we want to allow any custom callbacks 512 supportedFeatures := wasm.SupportedFeatures 513 app.WasmKeeper = wasm.NewKeeper( 514 app.marshal, 515 keys[wasm.StoreKey], 516 app.subspaces[wasm.ModuleName], 517 &app.AccountKeeper, 518 bank.NewBankKeeperAdapter(app.BankKeeper), 519 v2keeper.ChannelKeeper, 520 &v2keeper.PortKeeper, 521 nil, 522 app.TransferKeeper, 523 app.MsgServiceRouter(), 524 app.GRPCQueryRouter(), 525 wasmDir, 526 wasmConfig, 527 supportedFeatures, 528 vmbridge.GetWasmOpts(app.marshal.GetProtocMarshal()), 529 ) 530 (&app.WasmKeeper).SetInnerTxKeeper(app.EvmKeeper) 531 532 app.ParamsKeeper.RegisterSignal(wasm.SetNeedParamsUpdate) 533 534 // register the proposal types 535 // 3.register the proposal types 536 govRouter := gov.NewRouter() 537 govRouter.AddRoute(gov.RouterKey, gov.ProposalHandler). 538 AddRoute(params.RouterKey, params.NewParamChangeProposalHandler(&app.ParamsKeeper)). 539 AddRoute(distr.RouterKey, distr.NewDistributionProposalHandler(app.DistrKeeper)). 540 AddRoute(dex.RouterKey, dex.NewProposalHandler(&app.DexKeeper)). 541 AddRoute(farm.RouterKey, farm.NewManageWhiteListProposalHandler(&app.FarmKeeper)). 542 AddRoute(evm.RouterKey, evm.NewManageContractDeploymentWhitelistProposalHandler(app.EvmKeeper)). 543 AddRoute(mint.RouterKey, mint.NewManageTreasuresProposalHandler(&app.MintKeeper)). 544 AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientUpdateProposalHandler(app.IBCKeeper.V2Keeper.ClientKeeper)). 545 AddRoute(erc20.RouterKey, erc20.NewProposalHandler(&app.Erc20Keeper)). 546 AddRoute(feesplit.RouterKey, feesplit.NewProposalHandler(&app.FeeSplitKeeper)). 547 AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(&app.WasmKeeper, wasm.NecessaryProposals)). 548 AddRoute(params.UpgradeRouterKey, params.NewUpgradeProposalHandler(&app.ParamsKeeper)) 549 550 govProposalHandlerRouter := keeper.NewProposalHandlerRouter() 551 govProposalHandlerRouter.AddRoute(params.RouterKey, &app.ParamsKeeper). 552 AddRoute(dex.RouterKey, &app.DexKeeper). 553 AddRoute(farm.RouterKey, &app.FarmKeeper). 554 AddRoute(evm.RouterKey, app.EvmKeeper). 555 AddRoute(mint.RouterKey, &app.MintKeeper). 556 AddRoute(erc20.RouterKey, &app.Erc20Keeper). 557 AddRoute(feesplit.RouterKey, &app.FeeSplitKeeper). 558 AddRoute(distr.RouterKey, &app.DistrKeeper). 559 AddRoute(params.UpgradeRouterKey, &app.ParamsKeeper) 560 561 app.GovKeeper = gov.NewKeeper( 562 app.marshal.GetCdc(), app.keys[gov.StoreKey], app.ParamsKeeper, app.subspaces[gov.DefaultParamspace], 563 app.SupplyKeeper, &stakingKeeper, gov.DefaultParamspace, govRouter, 564 app.BankKeeper, govProposalHandlerRouter, auth.FeeCollectorName, 565 ) 566 app.ParamsKeeper.SetGovKeeper(app.GovKeeper) 567 app.DexKeeper.SetGovKeeper(app.GovKeeper) 568 app.FarmKeeper.SetGovKeeper(app.GovKeeper) 569 app.EvmKeeper.SetGovKeeper(app.GovKeeper) 570 app.MintKeeper.SetGovKeeper(app.GovKeeper) 571 app.Erc20Keeper.SetGovKeeper(app.GovKeeper) 572 app.FeeSplitKeeper.SetGovKeeper(app.GovKeeper) 573 app.DistrKeeper.SetGovKeeper(app.GovKeeper) 574 575 // Set IBC hooks 576 app.TransferKeeper = *app.TransferKeeper.SetHooks(erc20.NewIBCTransferHooks(app.Erc20Keeper)) 577 transferModule := ibctransfer.NewAppModule(app.TransferKeeper, codecProxy) 578 579 left := common.NewDisaleProxyMiddleware() 580 middle := ibctransfer.NewIBCModule(app.TransferKeeper, transferModule) 581 right := ibcfee.NewIBCMiddleware(middle, app.IBCFeeKeeper) 582 transferStack := ibcporttypes.NewFacadedMiddleware(left, 583 ibccommon.DefaultFactory(tmtypes.HigherThanVenus4, ibc.IBCV4, right), 584 ibccommon.DefaultFactory(tmtypes.HigherThanVenus1, ibc.IBCV2, middle)) 585 586 // Create static IBC router, add transfer route, then set and seal it 587 ibcRouter := ibcporttypes.NewRouter() 588 589 var icaControllerStack ibcporttypes.IBCModule 590 icaMauthIBCModule := icamauth.NewIBCModule(app.ICAMauthKeeper) 591 icaControllerStack = icaMauthIBCModule 592 icaControllerStack = icacontroller.NewIBCMiddleware(icaControllerStack, app.ICAControllerKeeper) 593 icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper) 594 var icaHostStack ibcporttypes.IBCModule 595 icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper) 596 icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper) 597 ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack) 598 ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack) 599 ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostStack) 600 ibcRouter.AddRoute(icamauthtypes.ModuleName, icaControllerStack) 601 602 //ibcRouter.AddRoute(ibcmock.ModuleName, mockModule) 603 v2keeper.SetRouter(ibcRouter) 604 605 // register the staking hooks 606 // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks 607 app.StakingKeeper = *stakingKeeper.SetHooks( 608 staking.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), 609 ) 610 611 wasmModule := wasm.NewAppModule(*app.marshal, &app.WasmKeeper) 612 app.WasmPermissionKeeper = wasmModule.GetPermissionKeeper() 613 app.VMBridgeKeeper = vmbridge.NewKeeper(app.marshal, app.Logger(), app.EvmKeeper, app.WasmPermissionKeeper, app.AccountKeeper) 614 615 // Set EVM hooks 616 app.EvmKeeper.SetHooks( 617 evm.NewMultiEvmHooks( 618 evm.NewLogProcessEvmHook( 619 erc20.NewSendToIbcEventHandler(app.Erc20Keeper), 620 erc20.NewSendNative20ToIbcEventHandler(app.Erc20Keeper), 621 vmbridge.NewSendToWasmEventHandler(*app.VMBridgeKeeper), 622 ), 623 app.FeeSplitKeeper.Hooks(), 624 ), 625 ) 626 627 // NOTE: Any module instantiated in the module manager that is later modified 628 // must be passed by reference here. 629 app.mm = module.NewManager( 630 genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx), 631 auth.NewAppModule(app.AccountKeeper), 632 bank.NewAppModule(app.BankKeeper, app.AccountKeeper, app.SupplyKeeper), 633 crisis.NewAppModule(&app.CrisisKeeper), 634 supply.NewAppModule(app.SupplyKeeper, app.AccountKeeper), 635 gov.NewAppModule(app.GovKeeper, app.SupplyKeeper), 636 mint.NewAppModule(app.MintKeeper), 637 slashing.NewAppModule(app.SlashingKeeper, app.AccountKeeper, app.StakingKeeper), 638 distr.NewAppModule(app.DistrKeeper, app.SupplyKeeper), 639 staking.NewAppModule(app.StakingKeeper, app.AccountKeeper, app.SupplyKeeper), 640 evidence.NewAppModule(app.EvidenceKeeper), 641 evm.NewAppModule(app.EvmKeeper, &app.AccountKeeper), 642 token.NewAppModule(commonversion.ProtocolVersionV0, app.TokenKeeper, app.SupplyKeeper), 643 dex.NewAppModule(commonversion.ProtocolVersionV0, app.DexKeeper, app.SupplyKeeper), 644 order.NewAppModule(commonversion.ProtocolVersionV0, app.OrderKeeper, app.SupplyKeeper), 645 ammswap.NewAppModule(app.SwapKeeper), 646 farm.NewAppModule(app.FarmKeeper), 647 infura.NewAppModule(app.InfuraKeeper), 648 params.NewAppModule(app.ParamsKeeper), 649 // ibc 650 ibc.NewAppModule(app.IBCKeeper), 651 capabilityModule.NewAppModule(codecProxy, *app.CapabilityKeeper), 652 transferModule, 653 erc20.NewAppModule(app.Erc20Keeper), 654 wasmModule, 655 feesplit.NewAppModule(app.FeeSplitKeeper), 656 ibcfee.NewAppModule(app.IBCFeeKeeper), 657 ica.NewAppModule(codecProxy, &app.ICAControllerKeeper, &app.ICAHostKeeper), 658 icamauth.NewAppModule(codecProxy, app.ICAMauthKeeper), 659 ) 660 661 // During begin block slashing happens after distr.BeginBlocker so that 662 // there is nothing left over in the validator fee pool, so as to keep the 663 // CanWithdrawInvariant invariant. 664 app.mm.SetOrderBeginBlockers( 665 infura.ModuleName, 666 bank.ModuleName, // we must sure bank.beginblocker must be first beginblocker for innerTx. infura can not gengerate tx, so infura can be first in the list. 667 capabilitytypes.ModuleName, 668 order.ModuleName, 669 token.ModuleName, 670 dex.ModuleName, 671 mint.ModuleName, 672 distr.ModuleName, 673 slashing.ModuleName, 674 staking.ModuleName, 675 farm.ModuleName, 676 evidence.ModuleName, 677 evm.ModuleName, 678 ibchost.ModuleName, 679 ibctransfertypes.ModuleName, 680 wasm.ModuleName, 681 ) 682 app.mm.SetOrderEndBlockers( 683 crisis.ModuleName, 684 gov.ModuleName, 685 dex.ModuleName, 686 order.ModuleName, 687 staking.ModuleName, 688 wasm.ModuleName, 689 evm.ModuleName, // we must sure evm.endblocker must be last endblocker for innerTx.infura can not gengerate tx, so infura can be last in the list. 690 infura.ModuleName, 691 ) 692 693 // NOTE: The genutils module must occur after staking so that pools are 694 // properly initialized with tokens from genesis accounts. 695 app.mm.SetOrderInitGenesis( 696 capabilitytypes.ModuleName, 697 auth.ModuleName, distr.ModuleName, staking.ModuleName, bank.ModuleName, 698 slashing.ModuleName, gov.ModuleName, mint.ModuleName, supply.ModuleName, 699 token.ModuleName, dex.ModuleName, order.ModuleName, ammswap.ModuleName, farm.ModuleName, 700 ibctransfertypes.ModuleName, 701 ibchost.ModuleName, 702 evm.ModuleName, crisis.ModuleName, genutil.ModuleName, params.ModuleName, evidence.ModuleName, 703 erc20.ModuleName, 704 wasm.ModuleName, 705 feesplit.ModuleName, 706 ibchost.ModuleName, 707 icatypes.ModuleName, ibcfeetypes.ModuleName, 708 ) 709 710 app.mm.RegisterInvariants(&app.CrisisKeeper) 711 app.mm.RegisterRoutes(app.Router(), app.QueryRouter()) 712 app.configurator = module.NewConfigurator(app.Codec(), app.MsgServiceRouter(), app.GRPCQueryRouter()) 713 app.mm.RegisterServices(app.configurator) 714 app.setupUpgradeModules() 715 716 vmbridge.RegisterServices(app.configurator, *app.VMBridgeKeeper) 717 718 // create the simulation manager and define the order of the modules for deterministic simulations 719 // 720 // NOTE: this is not required apps that don't use the simulator for fuzz testing 721 // transactions 722 app.sm = module.NewSimulationManager( 723 auth.NewAppModule(app.AccountKeeper), 724 bank.NewAppModule(app.BankKeeper, app.AccountKeeper, app.SupplyKeeper), 725 supply.NewAppModule(app.SupplyKeeper, app.AccountKeeper), 726 gov.NewAppModule(app.GovKeeper, app.SupplyKeeper), 727 mint.NewAppModule(app.MintKeeper), 728 staking.NewAppModule(app.StakingKeeper, app.AccountKeeper, app.SupplyKeeper), 729 distr.NewAppModule(app.DistrKeeper, app.SupplyKeeper), 730 slashing.NewAppModule(app.SlashingKeeper, app.AccountKeeper, app.StakingKeeper), 731 params.NewAppModule(app.ParamsKeeper), // NOTE: only used for simulation to generate randomized param change proposals 732 ibc.NewAppModule(app.IBCKeeper), 733 wasm.NewAppModule(*app.marshal, &app.WasmKeeper), 734 ) 735 736 app.sm.RegisterStoreDecoders() 737 738 // initialize stores 739 app.MountKVStores(keys) 740 app.MountTransientStores(tkeys) 741 app.MountMemoryStores(memKeys) 742 743 // initialize BaseApp 744 app.SetInitChainer(app.InitChainer) 745 app.SetBeginBlocker(app.BeginBlocker) 746 app.WasmHandler = wasmkeeper.HandlerOption{ 747 WasmConfig: &wasmConfig, 748 TXCounterStoreKey: keys[wasm.StoreKey], 749 } 750 app.SetAnteHandler(ante.NewAnteHandler(app.AccountKeeper, app.EvmKeeper, app.SupplyKeeper, validateMsgHook(app.OrderKeeper), app.WasmHandler, app.IBCKeeper, app.StakingKeeper, app.ParamsKeeper)) 751 app.SetEndBlocker(app.EndBlocker) 752 app.SetGasRefundHandler(refund.NewGasRefundHandler(app.AccountKeeper, app.SupplyKeeper, app.EvmKeeper)) 753 app.SetAccNonceHandler(NewAccNonceHandler(app.AccountKeeper)) 754 app.AddCustomizeModuleOnStopLogic(NewEvmModuleStopLogic(app.EvmKeeper)) 755 app.SetMptCommitHandler(NewMptCommitHandler(app.EvmKeeper)) 756 app.SetUpdateFeeCollectorAccHandler(updateFeeCollectorHandler(app.BankKeeper, app.SupplyKeeper)) 757 app.SetParallelTxLogHandlers(fixLogForParallelTxHandler(app.EvmKeeper)) 758 app.SetPreDeliverTxHandler(preDeliverTxHandler(app.AccountKeeper)) 759 app.SetPartialConcurrentHandlers(getTxFeeAndFromHandler(app.AccountKeeper)) 760 app.SetGetTxFeeHandler(getTxFeeHandler()) 761 app.SetEvmSysContractAddressHandler(NewEvmSysContractAddressHandler(app.EvmKeeper)) 762 app.SetEvmWatcherCollector(app.EvmKeeper.Watcher.Collect) 763 764 if loadLatest { 765 err := app.LoadLatestVersion(app.keys[bam.MainStoreKey]) 766 if err != nil { 767 tmos.Exit(err.Error()) 768 } 769 ctx := app.BaseApp.NewContext(true, abci.Header{}) 770 // Initialize pinned codes in wasmvm as they are not persisted there 771 if err := app.WasmKeeper.InitializePinnedCodes(ctx); err != nil { 772 tmos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err)) 773 } 774 775 if err := app.ParamsKeeper.ApplyEffectiveUpgrade(ctx); err != nil { 776 tmos.Exit(fmt.Sprintf("failed apply effective upgrade height info: %s", err)) 777 } 778 } 779 780 app.ScopedIBCKeeper = scopedIBCKeeper 781 app.ScopedTransferKeeper = scopedTransferKeeper 782 783 // NOTE: the IBC mock keeper and application module is used only for testing core IBC. Do 784 // note replicate if you do not need to test core IBC or light clients. 785 app.ScopedIBCMockKeeper = scopedIBCMockKeeper 786 787 enableAnalyzer := sm.DeliverTxsExecMode(viper.GetInt(sm.FlagDeliverTxsExecMode)) == sm.DeliverTxsExecModeSerial 788 trace.EnableAnalyzer(enableAnalyzer) 789 790 return app 791 } 792 793 func (app *FBChainApp) SetOption(req abci.RequestSetOption) (res abci.ResponseSetOption) { 794 if req.Key == "CheckChainID" { 795 if err := fbchain.IsValidateChainIdWithGenesisHeight(req.Value); err != nil { 796 app.Logger().Error(err.Error()) 797 panic(err) 798 } 799 err := fbchain.SetChainId(req.Value) 800 if err != nil { 801 app.Logger().Error(err.Error()) 802 panic(err) 803 } 804 } 805 return app.BaseApp.SetOption(req) 806 } 807 808 func (app *FBChainApp) LoadStartVersion(height int64) error { 809 return app.LoadVersion(height, app.keys[bam.MainStoreKey]) 810 } 811 812 // Name returns the name of the App 813 func (app *FBChainApp) Name() string { return app.BaseApp.Name() } 814 815 // BeginBlocker updates every begin block 816 func (app *FBChainApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { 817 return app.mm.BeginBlock(ctx, req) 818 } 819 820 // EndBlocker updates every end block 821 func (app *FBChainApp) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { 822 return app.mm.EndBlock(ctx, req) 823 } 824 825 // InitChainer updates at chain initialization 826 func (app *FBChainApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { 827 828 var genesisState simapp.GenesisState 829 app.marshal.GetCdc().MustUnmarshalJSON(req.AppStateBytes, &genesisState) 830 return app.mm.InitGenesis(ctx, genesisState) 831 } 832 833 // LoadHeight loads state at a particular height 834 func (app *FBChainApp) LoadHeight(height int64) error { 835 return app.LoadVersion(height, app.keys[bam.MainStoreKey]) 836 } 837 838 // ModuleAccountAddrs returns all the app's module account addresses. 839 func (app *FBChainApp) ModuleAccountAddrs() map[string]bool { 840 modAccAddrs := make(map[string]bool) 841 for acc := range maccPerms { 842 modAccAddrs[supply.NewModuleAddress(acc).String()] = true 843 } 844 845 return modAccAddrs 846 } 847 848 // SimulationManager implements the SimulationApp interface 849 func (app *FBChainApp) SimulationManager() *module.SimulationManager { 850 return app.sm 851 } 852 853 // GetKey returns the KVStoreKey for the provided store key. 854 // 855 // NOTE: This is solely to be used for testing purposes. 856 func (app *FBChainApp) GetKey(storeKey string) *sdk.KVStoreKey { 857 return app.keys[storeKey] 858 } 859 860 // Codec returns FBChain's codec. 861 // 862 // NOTE: This is solely to be used for testing purposes as it may be desirable 863 // for modules to register their own custom testing types. 864 func (app *FBChainApp) Codec() *codec.Codec { 865 return app.marshal.GetCdc() 866 } 867 868 func (app *FBChainApp) Marshal() *codec.CodecProxy { 869 return app.marshal 870 } 871 872 // GetSubspace returns a param subspace for a given module name. 873 // 874 // NOTE: This is solely to be used for testing purposes. 875 func (app *FBChainApp) GetSubspace(moduleName string) params.Subspace { 876 return app.subspaces[moduleName] 877 } 878 879 var protoCodec = encoding.GetCodec(proto.Name) 880 881 func makeInterceptors() map[string]bam.Interceptor { 882 m := make(map[string]bam.Interceptor) 883 m["/cosmos.tx.v1beta1.Service/Simulate"] = bam.NewRedirectInterceptor("app/simulate") 884 m["/cosmos.bank.v1beta1.Query/AllBalances"] = bam.NewRedirectInterceptor("custom/bank/grpc_balances") 885 m["/cosmos.staking.v1beta1.Query/Params"] = bam.NewRedirectInterceptor("custom/staking/params4ibc") 886 return m 887 } 888 889 // GetMaccPerms returns a copy of the module account permissions 890 func GetMaccPerms() map[string][]string { 891 dupMaccPerms := make(map[string][]string) 892 for k, v := range maccPerms { 893 dupMaccPerms[k] = v 894 } 895 896 return dupMaccPerms 897 } 898 899 func validateMsgHook(orderKeeper order.Keeper) ante.ValidateMsgHandler { 900 return func(newCtx sdk.Context, msgs []sdk.Msg) error { 901 902 wrongMsgErr := sdk.ErrUnknownRequest( 903 "It is not allowed that a transaction with more than one message contains order or evm message") 904 var err error 905 906 for _, msg := range msgs { 907 switch assertedMsg := msg.(type) { 908 case order.MsgNewOrders: 909 if len(msgs) > 1 { 910 return wrongMsgErr 911 } 912 _, err = order.ValidateMsgNewOrders(newCtx, orderKeeper, assertedMsg) 913 case order.MsgCancelOrders: 914 if len(msgs) > 1 { 915 return wrongMsgErr 916 } 917 err = order.ValidateMsgCancelOrders(newCtx, orderKeeper, assertedMsg) 918 case *evmtypes.MsgEthereumTx: 919 if len(msgs) > 1 { 920 return wrongMsgErr 921 } 922 } 923 924 if err != nil { 925 return err 926 } 927 } 928 return nil 929 } 930 } 931 932 func NewAccNonceHandler(ak auth.AccountKeeper) sdk.AccNonceHandler { 933 return func( 934 ctx sdk.Context, addr sdk.AccAddress, 935 ) uint64 { 936 if acc := ak.GetAccount(ctx, addr); acc != nil { 937 return acc.GetSequence() 938 } 939 return 0 940 } 941 } 942 943 func PreRun(ctx *server.Context, cmd *cobra.Command) error { 944 // check start flag conflicts 945 err := sanity.CheckStart() 946 if err != nil { 947 return err 948 } 949 950 // set config by node mode 951 err = setNodeConfig(ctx) 952 if err != nil { 953 return err 954 } 955 956 //download pprof 957 appconfig.PprofDownload(ctx) 958 959 // pruning options 960 _, err = server.GetPruningOptionsFromFlags() 961 if err != nil { 962 return err 963 } 964 // repair state on start 965 if viper.GetBool(FlagEnableRepairState) { 966 repairStateOnStart(ctx) 967 } 968 969 // init tx signature cache 970 tmtypes.InitSignatureCache() 971 972 isFastStorage := appstatus.IsFastStorageStrategy() 973 iavl.SetEnableFastStorage(isFastStorage) 974 viper.Set(iavl.FlagIavlEnableFastStorage, isFastStorage) 975 976 // set external package flags 977 server.SetExternalPackageValue(cmd) 978 979 ctx.Logger.Info("The database storage strategy", "fast-storage", iavl.GetEnableFastStorage()) 980 // set the dynamic config 981 appconfig.RegisterDynamicConfig(ctx.Logger.With("module", "config")) 982 983 return nil 984 } 985 986 func NewEvmModuleStopLogic(ak *evm.Keeper) sdk.CustomizeOnStop { 987 return func(ctx sdk.Context) error { 988 if tmtypes.HigherThanMars(ctx.BlockHeight()) || mpt.TrieWriteAhead { 989 return ak.OnStop(ctx) 990 } 991 return nil 992 } 993 } 994 995 func NewMptCommitHandler(ak *evm.Keeper) sdk.MptCommitHandler { 996 return func(ctx sdk.Context) { 997 if tmtypes.HigherThanMars(ctx.BlockHeight()) || mpt.TrieWriteAhead { 998 ak.PushData2Database(ctx.BlockHeight(), ctx.Logger()) 999 } 1000 } 1001 } 1002 1003 func NewEvmSysContractAddressHandler(ak *evm.Keeper) sdk.EvmSysContractAddressHandler { 1004 if ak == nil { 1005 panic("NewEvmSysContractAddressHandler ak is nil") 1006 } 1007 return func( 1008 ctx sdk.Context, addr sdk.AccAddress, 1009 ) bool { 1010 if addr.Empty() { 1011 return false 1012 } 1013 return ak.IsMatchSysContractAddress(ctx, addr) 1014 } 1015 }