github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/ibc-go/testing/simapp/app.go (about) 1 package simapp 2 3 import ( 4 "encoding/hex" 5 "fmt" 6 evm2 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/adapter/evm" 7 8 "io" 9 "math/big" 10 "os" 11 "path/filepath" 12 "sort" 13 "strings" 14 "sync" 15 16 ibctransfer "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/transfer" 17 18 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/adapter/fee" 19 20 ica2 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/adapter/ica" 21 22 "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/common" 23 24 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/cli" 25 26 icahost "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/host" 27 28 icacontroller "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/controller" 29 30 ibcclienttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client/types" 31 32 ibccommon "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/common" 33 34 icamauthtypes "github.com/fibonacci-chain/fbc/x/icamauth/types" 35 36 icacontrollertypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/controller/types" 37 icahosttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/host/types" 38 39 "github.com/spf13/viper" 40 41 icatypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/types" 42 43 ibckeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/keeper" 44 45 authante "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/ante" 46 icacontrollerkeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/controller/keeper" 47 icahostkeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/27-interchain-accounts/host/keeper" 48 ibcfee "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee" 49 ibcfeekeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee/keeper" 50 ibcfeetypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee/types" 51 "github.com/fibonacci-chain/fbc/libs/system/trace" 52 "github.com/fibonacci-chain/fbc/x/icamauth" 53 icamauthkeeper "github.com/fibonacci-chain/fbc/x/icamauth/keeper" 54 "github.com/fibonacci-chain/fbc/x/wasm" 55 wasmkeeper "github.com/fibonacci-chain/fbc/x/wasm/keeper" 56 "google.golang.org/grpc/encoding" 57 "google.golang.org/grpc/encoding/proto" 58 59 "github.com/fibonacci-chain/fbc/app/ante" 60 fbexchaincodec "github.com/fibonacci-chain/fbc/app/codec" 61 appconfig "github.com/fibonacci-chain/fbc/app/config" 62 "github.com/fibonacci-chain/fbc/app/refund" 63 ethermint "github.com/fibonacci-chain/fbc/app/types" 64 fbexchain "github.com/fibonacci-chain/fbc/app/types" 65 "github.com/fibonacci-chain/fbc/app/utils/sanity" 66 bam "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/baseapp" 67 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client" 68 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 69 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/server" 70 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/simapp" 71 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/mpt" 72 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/types" 73 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 74 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/module" 75 upgradetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/upgrade" 76 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version" 77 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 78 authtypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/types" 79 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank" 80 capabilityModule "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/capability" 81 capabilitykeeper "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/capability/keeper" 82 capabilitytypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/capability/types" 83 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/crisis" 84 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint" 85 govclient "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/client" 86 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params/subspace" 87 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 88 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/upgrade" 89 ibctransferkeeper "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/transfer/keeper" 90 ibctransfertypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/transfer/types" 91 ibc "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core" 92 ibcclient "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client" 93 ibcporttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/05-port/types" 94 ibchost "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/24-host" 95 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/mock" 96 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/adapter/capability" 97 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/adapter/core" 98 staking2 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/adapter/staking" 99 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/adapter/transfer" 100 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 101 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 102 tmos "github.com/fibonacci-chain/fbc/libs/tendermint/libs/os" 103 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 104 dbm "github.com/fibonacci-chain/fbc/libs/tm-db" 105 "github.com/fibonacci-chain/fbc/x/ammswap" 106 "github.com/fibonacci-chain/fbc/x/common/monitor" 107 commonversion "github.com/fibonacci-chain/fbc/x/common/version" 108 "github.com/fibonacci-chain/fbc/x/dex" 109 dexclient "github.com/fibonacci-chain/fbc/x/dex/client" 110 distr "github.com/fibonacci-chain/fbc/x/distribution" 111 "github.com/fibonacci-chain/fbc/x/erc20" 112 erc20client "github.com/fibonacci-chain/fbc/x/erc20/client" 113 "github.com/fibonacci-chain/fbc/x/evidence" 114 "github.com/fibonacci-chain/fbc/x/evm" 115 evmclient "github.com/fibonacci-chain/fbc/x/evm/client" 116 evmtypes "github.com/fibonacci-chain/fbc/x/evm/types" 117 "github.com/fibonacci-chain/fbc/x/farm" 118 farmclient "github.com/fibonacci-chain/fbc/x/farm/client" 119 "github.com/fibonacci-chain/fbc/x/genutil" 120 "github.com/fibonacci-chain/fbc/x/gov" 121 "github.com/fibonacci-chain/fbc/x/gov/keeper" 122 "github.com/fibonacci-chain/fbc/x/order" 123 "github.com/fibonacci-chain/fbc/x/params" 124 paramsclient "github.com/fibonacci-chain/fbc/x/params/client" 125 "github.com/fibonacci-chain/fbc/x/slashing" 126 "github.com/fibonacci-chain/fbc/x/staking" 127 "github.com/fibonacci-chain/fbc/x/token" 128 wasmclient "github.com/fibonacci-chain/fbc/x/wasm/client" 129 ) 130 131 func init() { 132 // set the address prefixes 133 config := sdk.GetConfig() 134 config.SetCoinType(60) 135 fbexchain.SetBech32Prefixes(config) 136 fbexchain.SetBip44CoinType(config) 137 } 138 139 const ( 140 appName = "FBChain" 141 ) 142 const ( 143 MockFeePort string = mock.ModuleName + ibcfeetypes.ModuleName 144 ) 145 146 var ( 147 // DefaultCLIHome sets the default home directories for the application CLI 148 DefaultCLIHome = os.ExpandEnv("$HOME/.fbchaincli") 149 150 // DefaultNodeHome sets the folder where the applcation data and configuration will be stored 151 DefaultNodeHome = os.ExpandEnv("$HOME/.fbchaind") 152 153 // ModuleBasics defines the module BasicManager is in charge of setting up basic, 154 // non-dependant module elements, such as codec registration 155 // and genesis verification. 156 ModuleBasics = module.NewBasicManager( 157 auth.AppModuleBasic{}, 158 supply.AppModuleBasic{}, 159 genutil.AppModuleBasic{}, 160 bank.AppModuleBasic{}, 161 staking.AppModuleBasic{}, 162 mint.AppModuleBasic{}, 163 distr.AppModuleBasic{}, 164 gov.NewAppModuleBasic( 165 paramsclient.ProposalHandler, 166 distr.CommunityPoolSpendProposalHandler, 167 distr.ChangeDistributionTypeProposalHandler, 168 distr.WithdrawRewardEnabledProposalHandler, 169 distr.RewardTruncatePrecisionProposalHandler, 170 dexclient.DelistProposalHandler, farmclient.ManageWhiteListProposalHandler, 171 evmclient.ManageContractDeploymentWhitelistProposalHandler, 172 evmclient.ManageContractBlockedListProposalHandler, 173 evmclient.ManageContractMethodGuFactorProposalHandler, 174 evmclient.ManageContractMethodBlockedListProposalHandler, 175 evmclient.ManageSysContractAddressProposalHandler, 176 evmclient.ManageContractByteCodeProposalHandler, 177 govclient.ModifyNextBlockUpdateProposalHandler, 178 govclient.ManageTreasuresProposalHandler, 179 erc20client.TokenMappingProposalHandler, 180 erc20client.ProxyContractRedirectHandler, 181 wasmclient.MigrateContractProposalHandler, 182 wasmclient.UpdateContractAdminProposalHandler, 183 wasmclient.ClearContractAdminProposalHandler, 184 wasmclient.PinCodesProposalHandler, 185 wasmclient.UnpinCodesProposalHandler, 186 wasmclient.UpdateDeploymentWhitelistProposalHandler, 187 wasmclient.UpdateWASMContractMethodBlockedListProposalHandler, 188 ), 189 params.AppModuleBasic{}, 190 crisis.AppModuleBasic{}, 191 slashing.AppModuleBasic{}, 192 evidence.AppModuleBasic{}, 193 upgrade.AppModuleBasic{}, 194 evm.AppModuleBasic{}, 195 token.AppModuleBasic{}, 196 dex.AppModuleBasic{}, 197 order.AppModuleBasic{}, 198 ammswap.AppModuleBasic{}, 199 farm.AppModuleBasic{}, 200 capabilityModule.AppModuleBasic{}, 201 core.CoreModule{}, 202 capability.CapabilityModuleAdapter{}, 203 transfer.TransferModule{}, 204 erc20.AppModuleBasic{}, 205 mock.AppModuleBasic{}, 206 wasm.AppModuleBasic{}, 207 ica2.TestICAModuleBaisc{}, 208 fee.TestFeeAppModuleBaisc{}, 209 icamauth.AppModuleBasic{}, 210 ) 211 212 // module account permissions 213 maccPerms = map[string][]string{ 214 auth.FeeCollectorName: nil, 215 distr.ModuleName: nil, 216 mint.ModuleName: {supply.Minter}, 217 staking.BondedPoolName: {supply.Burner, supply.Staking}, 218 staking.NotBondedPoolName: {supply.Burner, supply.Staking}, 219 gov.ModuleName: nil, 220 token.ModuleName: {supply.Minter, supply.Burner}, 221 dex.ModuleName: nil, 222 order.ModuleName: nil, 223 ammswap.ModuleName: {supply.Minter, supply.Burner}, 224 farm.ModuleName: nil, 225 farm.YieldFarmingAccount: nil, 226 farm.MintFarmingAccount: {supply.Burner}, 227 ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, 228 erc20.ModuleName: {authtypes.Minter, authtypes.Burner}, 229 ibcfeetypes.ModuleName: nil, 230 icatypes.ModuleName: nil, 231 mock.ModuleName: nil, 232 } 233 234 GlobalGpIndex = GasPriceIndex{} 235 236 onceLog sync.Once 237 ) 238 239 type GasPriceIndex struct { 240 RecommendGp *big.Int `json:"recommend-gp"` 241 } 242 243 var _ simapp.App = (*SimApp)(nil) 244 245 // SimApp implements an extended ABCI application. It is an application 246 // that may process transactions through Ethereum's EVM running atop of 247 // Tendermint consensus. 248 type SimApp struct { 249 *bam.BaseApp 250 251 txconfig client.TxConfig 252 253 CodecProxy *codec.CodecProxy 254 255 invCheckPeriod uint 256 257 // keys to access the substores 258 keys map[string]*sdk.KVStoreKey 259 tkeys map[string]*sdk.TransientStoreKey 260 memKeys map[string]*sdk.MemoryStoreKey 261 262 // subspaces 263 subspaces map[string]params.Subspace 264 265 // keepers 266 AccountKeeper auth.AccountKeeper 267 BankKeeper *bank.BankKeeperAdapter 268 SupplyKeeper *supply.KeeperAdapter 269 StakingKeeper staking.Keeper 270 SlashingKeeper slashing.Keeper 271 MintKeeper mint.Keeper 272 DistrKeeper distr.Keeper 273 GovKeeper gov.Keeper 274 CrisisKeeper crisis.Keeper 275 UpgradeKeeper upgrade.Keeper 276 ParamsKeeper params.Keeper 277 EvidenceKeeper evidence.Keeper 278 EvmKeeper *evm.Keeper 279 TokenKeeper token.Keeper 280 DexKeeper dex.Keeper 281 OrderKeeper order.Keeper 282 SwapKeeper ammswap.Keeper 283 FarmKeeper farm.Keeper 284 wasmKeeper wasm.Keeper 285 286 // the module manager 287 mm *module.Manager 288 289 // simulation manager 290 sm *module.SimulationManager 291 292 blockGasPrice []*big.Int 293 294 configurator module.Configurator 295 // ibc 296 ScopedIBCKeeper capabilitykeeper.ScopedKeeper 297 ScopedTransferKeeper capabilitykeeper.ScopedKeeper 298 ScopedIBCMockKeeper capabilitykeeper.ScopedKeeper 299 ScopedICAMockKeeper capabilitykeeper.ScopedKeeper 300 ScopedICAHostKeeper capabilitykeeper.ScopedKeeper 301 TransferKeeper ibctransferkeeper.Keeper 302 CapabilityKeeper *capabilitykeeper.Keeper 303 IBCKeeper *ibc.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly 304 marshal *codec.CodecProxy 305 heightTasks map[int64]*upgradetypes.HeightTasks 306 Erc20Keeper erc20.Keeper 307 308 ibcScopeKeep capabilitykeeper.ScopedKeeper 309 WasmHandler wasmkeeper.HandlerOption 310 311 IBCFeeKeeper ibcfeekeeper.Keeper 312 ICAMauthKeeper icamauthkeeper.Keeper 313 ICAControllerKeeper icacontrollerkeeper.Keeper 314 ICAHostKeeper icahostkeeper.Keeper 315 ICAAuthModule mock.IBCModule 316 317 FeeMockModule mock.IBCModule 318 } 319 320 func NewSimApp( 321 logger log.Logger, 322 db dbm.DB, 323 traceStore io.Writer, 324 loadLatest bool, 325 skipUpgradeHeights map[int64]bool, 326 invCheckPeriod uint, 327 baseAppOptions ...func(*bam.BaseApp), 328 ) *SimApp { 329 logger.Info("Starting FBC", 330 "GenesisHeight", tmtypes.GetStartBlockHeight(), 331 "MercuryHeight", tmtypes.GetMercuryHeight(), 332 "VenusHeight", tmtypes.GetVenusHeight(), 333 ) 334 //onceLog.Do(func() { 335 // iavl.SetLogger(logger.With("module", "iavl")) 336 // logStartingFlags(logger) 337 //}) 338 339 codecProxy, interfaceReg := fbexchaincodec.MakeCodecSuit(ModuleBasics) 340 341 // NOTE we use custom fbchaintransaction decoder that supports the sdk.Tx interface instead of sdk.StdTx 342 bApp := bam.NewBaseApp(appName, logger, db, evm.TxDecoder(codecProxy), baseAppOptions...) 343 344 bApp.SetCommitMultiStoreTracer(traceStore) 345 bApp.SetAppVersion(version.Version) 346 bApp.SetStartLogHandler(trace.StartTxLog) 347 bApp.SetEndLogHandler(trace.StopTxLog) 348 349 bApp.SetInterfaceRegistry(interfaceReg) 350 351 keys := sdk.NewKVStoreKeys( 352 bam.MainStoreKey, auth.StoreKey, staking.StoreKey, 353 supply.StoreKey, mint.StoreKey, distr.StoreKey, slashing.StoreKey, 354 gov.StoreKey, params.StoreKey, upgrade.StoreKey, evidence.StoreKey, 355 evm.StoreKey, token.StoreKey, token.KeyLock, dex.StoreKey, dex.TokenPairStoreKey, 356 order.OrderStoreKey, ammswap.StoreKey, farm.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, 357 ibchost.StoreKey, 358 erc20.StoreKey, 359 mpt.StoreKey, wasm.StoreKey, 360 icacontrollertypes.StoreKey, icahosttypes.StoreKey, ibcfeetypes.StoreKey, 361 icamauthtypes.StoreKey, 362 ) 363 364 tkeys := sdk.NewTransientStoreKeys(params.TStoreKey) 365 memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) 366 367 app := &SimApp{ 368 BaseApp: bApp, 369 invCheckPeriod: invCheckPeriod, 370 keys: keys, 371 tkeys: tkeys, 372 subspaces: make(map[string]params.Subspace), 373 heightTasks: make(map[int64]*upgradetypes.HeightTasks), 374 memKeys: memKeys, 375 } 376 app.CodecProxy = codecProxy 377 bApp.SetInterceptors(makeInterceptors()) 378 379 // init params keeper and subspaces 380 app.ParamsKeeper = params.NewKeeper(codecProxy.GetCdc(), keys[params.StoreKey], tkeys[params.TStoreKey], logger) 381 app.subspaces[auth.ModuleName] = app.ParamsKeeper.Subspace(auth.DefaultParamspace) 382 app.subspaces[bank.ModuleName] = app.ParamsKeeper.Subspace(bank.DefaultParamspace) 383 app.subspaces[staking.ModuleName] = app.ParamsKeeper.Subspace(staking.DefaultParamspace) 384 app.subspaces[mint.ModuleName] = app.ParamsKeeper.Subspace(mint.DefaultParamspace) 385 app.subspaces[distr.ModuleName] = app.ParamsKeeper.Subspace(distr.DefaultParamspace) 386 app.subspaces[slashing.ModuleName] = app.ParamsKeeper.Subspace(slashing.DefaultParamspace) 387 app.subspaces[gov.ModuleName] = app.ParamsKeeper.Subspace(gov.DefaultParamspace) 388 app.subspaces[crisis.ModuleName] = app.ParamsKeeper.Subspace(crisis.DefaultParamspace) 389 app.subspaces[evidence.ModuleName] = app.ParamsKeeper.Subspace(evidence.DefaultParamspace) 390 app.subspaces[evm.ModuleName] = app.ParamsKeeper.Subspace(evm.DefaultParamspace) 391 app.subspaces[token.ModuleName] = app.ParamsKeeper.Subspace(token.DefaultParamspace) 392 app.subspaces[dex.ModuleName] = app.ParamsKeeper.Subspace(dex.DefaultParamspace) 393 app.subspaces[order.ModuleName] = app.ParamsKeeper.Subspace(order.DefaultParamspace) 394 app.subspaces[ammswap.ModuleName] = app.ParamsKeeper.Subspace(ammswap.DefaultParamspace) 395 app.subspaces[farm.ModuleName] = app.ParamsKeeper.Subspace(farm.DefaultParamspace) 396 app.subspaces[ibchost.ModuleName] = app.ParamsKeeper.Subspace(ibchost.ModuleName) 397 app.subspaces[ibctransfertypes.ModuleName] = app.ParamsKeeper.Subspace(ibctransfertypes.ModuleName) 398 app.subspaces[erc20.ModuleName] = app.ParamsKeeper.Subspace(erc20.DefaultParamspace) 399 app.subspaces[wasm.ModuleName] = app.ParamsKeeper.Subspace(wasm.ModuleName) 400 app.subspaces[icacontrollertypes.SubModuleName] = app.ParamsKeeper.Subspace(icacontrollertypes.SubModuleName) 401 app.subspaces[icahosttypes.SubModuleName] = app.ParamsKeeper.Subspace(icahosttypes.SubModuleName) 402 app.subspaces[ibcfeetypes.ModuleName] = app.ParamsKeeper.Subspace(ibcfeetypes.ModuleName) 403 404 //proxy := codec.NewMarshalProxy(cc, cdc) 405 app.marshal = codecProxy 406 // use custom fbchainaccount for contracts 407 app.AccountKeeper = auth.NewAccountKeeper( 408 codecProxy.GetCdc(), keys[auth.StoreKey], keys[mpt.StoreKey], app.subspaces[auth.ModuleName], fbexchain.ProtoAccount, 409 ) 410 411 bankKeeper := bank.NewBaseKeeperWithMarshal( 412 &app.AccountKeeper, codecProxy, app.subspaces[bank.ModuleName], app.ModuleAccountAddrs(), 413 ) 414 app.BankKeeper = bank.NewBankKeeperAdapter(bankKeeper) 415 app.ParamsKeeper.SetBankKeeper(app.BankKeeper) 416 sup := supply.NewKeeper( 417 codecProxy.GetCdc(), keys[supply.StoreKey], &app.AccountKeeper, bank.NewBankKeeperAdapter(app.BankKeeper), maccPerms, 418 ) 419 app.SupplyKeeper = supply.NewSupplyKeeperAdapter(sup) 420 stakingKeeper := staking2.NewStakingKeeper( 421 codecProxy, keys[staking.StoreKey], app.SupplyKeeper, app.subspaces[staking.ModuleName], 422 ).Keeper 423 app.ParamsKeeper.SetStakingKeeper(stakingKeeper) 424 app.MintKeeper = mint.NewKeeper( 425 codecProxy.GetCdc(), keys[mint.StoreKey], app.subspaces[mint.ModuleName], stakingKeeper, 426 app.SupplyKeeper, auth.FeeCollectorName, farm.MintFarmingAccount, 427 ) 428 app.DistrKeeper = distr.NewKeeper( 429 codecProxy.GetCdc(), keys[distr.StoreKey], app.subspaces[distr.ModuleName], stakingKeeper, 430 app.SupplyKeeper, auth.FeeCollectorName, app.ModuleAccountAddrs(), 431 ) 432 app.SlashingKeeper = slashing.NewKeeper( 433 codecProxy.GetCdc(), keys[slashing.StoreKey], stakingKeeper, app.subspaces[slashing.ModuleName], 434 ) 435 app.CrisisKeeper = crisis.NewKeeper( 436 app.subspaces[crisis.ModuleName], invCheckPeriod, app.SupplyKeeper, auth.FeeCollectorName, 437 ) 438 app.UpgradeKeeper = upgrade.NewKeeper(skipUpgradeHeights, keys[upgrade.StoreKey], app.marshal.GetCdc()) 439 app.ParamsKeeper.RegisterSignal(evmtypes.SetEvmParamsNeedUpdate) 440 app.EvmKeeper = evm.NewKeeper( 441 app.marshal.GetCdc(), keys[evm.StoreKey], app.subspaces[evm.ModuleName], &app.AccountKeeper, app.SupplyKeeper, app.BankKeeper, stakingKeeper, logger) 442 (&bankKeeper).SetInnerTxKeeper(app.EvmKeeper) 443 444 app.TokenKeeper = token.NewKeeper(app.BankKeeper, app.subspaces[token.ModuleName], auth.FeeCollectorName, app.SupplyKeeper, 445 keys[token.StoreKey], keys[token.KeyLock], app.marshal.GetCdc(), false, &app.AccountKeeper) 446 447 app.DexKeeper = dex.NewKeeper(auth.FeeCollectorName, app.SupplyKeeper, app.subspaces[dex.ModuleName], app.TokenKeeper, stakingKeeper, 448 app.BankKeeper, app.keys[dex.StoreKey], app.keys[dex.TokenPairStoreKey], app.marshal.GetCdc()) 449 450 app.OrderKeeper = order.NewKeeper( 451 app.TokenKeeper, app.SupplyKeeper, app.DexKeeper, app.subspaces[order.ModuleName], auth.FeeCollectorName, 452 app.keys[order.OrderStoreKey], app.marshal.GetCdc(), false, monitor.NopOrderMetrics()) 453 454 app.SwapKeeper = ammswap.NewKeeper(app.SupplyKeeper, app.TokenKeeper, app.marshal.GetCdc(), app.keys[ammswap.StoreKey], app.subspaces[ammswap.ModuleName]) 455 456 app.FarmKeeper = farm.NewKeeper(auth.FeeCollectorName, app.SupplyKeeper.Keeper, app.TokenKeeper, app.SwapKeeper, *app.EvmKeeper, app.subspaces[farm.StoreKey], 457 app.keys[farm.StoreKey], app.marshal.GetCdc()) 458 459 // create evidence keeper with router 460 evidenceKeeper := evidence.NewKeeper( 461 codecProxy.GetCdc(), keys[evidence.StoreKey], app.subspaces[evidence.ModuleName], &app.StakingKeeper, app.SlashingKeeper, 462 ) 463 evidenceRouter := evidence.NewRouter() 464 evidenceKeeper.SetRouter(evidenceRouter) 465 app.EvidenceKeeper = *evidenceKeeper 466 467 // add capability keeper and ScopeToModule for ibc module 468 app.CapabilityKeeper = capabilitykeeper.NewKeeper(codecProxy, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey]) 469 scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) 470 app.ibcScopeKeep = scopedIBCKeeper 471 scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) 472 // NOTE: the IBC mock keeper and application module is used only for testing core IBC. Do 473 // note replicate if you do not need to test core IBC or light clients. 474 scopedIBCMockKeeper := app.CapabilityKeeper.ScopeToModule(mock.ModuleName) 475 scopedICAMockKeeper := app.CapabilityKeeper.ScopeToModule(mock.ModuleName + icacontrollertypes.SubModuleName) 476 scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) 477 scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) 478 scopedICAMauthKeeper := app.CapabilityKeeper.ScopeToModule(icamauthtypes.ModuleName) 479 scopedFeeMockKeeper := app.CapabilityKeeper.ScopeToModule(MockFeePort) 480 481 v2keeper := ibc.NewKeeper( 482 codecProxy, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &stakingKeeper, app.UpgradeKeeper, &scopedIBCKeeper, interfaceReg, 483 ) 484 v4Keeper := ibc.NewV4Keeper(v2keeper) 485 facadedKeeper := ibc.NewFacadedKeeper(v2keeper) 486 facadedKeeper.RegisterKeeper(ibccommon.DefaultFactory(tmtypes.HigherThanVenus4, ibc.IBCV4, v4Keeper)) 487 app.IBCKeeper = facadedKeeper 488 489 // Create Transfer Keepers 490 app.TransferKeeper = ibctransferkeeper.NewKeeper( 491 codecProxy, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), 492 v2keeper.ChannelKeeper, &v2keeper.PortKeeper, 493 app.SupplyKeeper, app.SupplyKeeper, scopedTransferKeeper, interfaceReg, 494 ) 495 ibctransfertypes.SetMarshal(codecProxy) 496 497 app.IBCFeeKeeper = ibcfeekeeper.NewKeeper(codecProxy, keys[ibcfeetypes.StoreKey], app.GetSubspace(ibcfeetypes.ModuleName), 498 v2keeper.ChannelKeeper, // may be replaced with IBC middleware 499 v2keeper.ChannelKeeper, 500 &v2keeper.PortKeeper, app.SupplyKeeper, app.SupplyKeeper, 501 ) 502 503 // ICA Controller keeper 504 app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( 505 codecProxy, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), 506 app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack 507 app.IBCKeeper.V2Keeper.ChannelKeeper, &app.IBCKeeper.V2Keeper.PortKeeper, 508 scopedICAControllerKeeper, app.MsgServiceRouter(), 509 ) 510 511 // ICA Host keeper 512 app.ICAHostKeeper = icahostkeeper.NewKeeper( 513 codecProxy, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), 514 app.IBCKeeper.V2Keeper.ChannelKeeper, &app.IBCKeeper.V2Keeper.PortKeeper, 515 app.SupplyKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), 516 ) 517 518 app.ICAMauthKeeper = icamauthkeeper.NewKeeper( 519 codecProxy, 520 keys[icamauthtypes.StoreKey], 521 app.ICAControllerKeeper, 522 scopedICAMauthKeeper, 523 ) 524 525 app.Erc20Keeper = erc20.NewKeeper(app.marshal.GetCdc(), app.keys[erc20.ModuleName], app.subspaces[erc20.ModuleName], 526 app.AccountKeeper, app.SupplyKeeper, app.BankKeeper, app.EvmKeeper, app.TransferKeeper) 527 528 // register the proposal types 529 // 3.register the proposal types 530 govRouter := gov.NewRouter() 531 govRouter.AddRoute(gov.RouterKey, gov.ProposalHandler). 532 AddRoute(params.RouterKey, params.NewParamChangeProposalHandler(&app.ParamsKeeper)). 533 AddRoute(distr.RouterKey, distr.NewDistributionProposalHandler(app.DistrKeeper)). 534 AddRoute(dex.RouterKey, dex.NewProposalHandler(&app.DexKeeper)). 535 AddRoute(farm.RouterKey, farm.NewManageWhiteListProposalHandler(&app.FarmKeeper)). 536 AddRoute(evm.RouterKey, evm.NewManageContractDeploymentWhitelistProposalHandler(app.EvmKeeper)). 537 AddRoute(mint.RouterKey, mint.NewManageTreasuresProposalHandler(&app.MintKeeper)). 538 AddRoute(ibchost.RouterKey, ibcclient.NewClientUpdateProposalHandler(v2keeper.ClientKeeper)). 539 AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientUpdateProposalHandler(v2keeper.ClientKeeper)). 540 AddRoute(erc20.RouterKey, erc20.NewProposalHandler(&app.Erc20Keeper)) 541 govProposalHandlerRouter := keeper.NewProposalHandlerRouter() 542 govProposalHandlerRouter.AddRoute(params.RouterKey, &app.ParamsKeeper). 543 AddRoute(dex.RouterKey, &app.DexKeeper). 544 AddRoute(farm.RouterKey, &app.FarmKeeper). 545 AddRoute(evm.RouterKey, app.EvmKeeper). 546 AddRoute(mint.RouterKey, &app.MintKeeper). 547 AddRoute(erc20.RouterKey, &app.Erc20Keeper) 548 app.GovKeeper = gov.NewKeeper( 549 app.marshal.GetCdc(), app.keys[gov.StoreKey], app.ParamsKeeper, app.subspaces[gov.DefaultParamspace], 550 app.SupplyKeeper, stakingKeeper, gov.DefaultParamspace, govRouter, 551 app.BankKeeper, govProposalHandlerRouter, auth.FeeCollectorName, 552 ) 553 app.ParamsKeeper.SetGovKeeper(app.GovKeeper) 554 app.DexKeeper.SetGovKeeper(app.GovKeeper) 555 app.FarmKeeper.SetGovKeeper(app.GovKeeper) 556 app.EvmKeeper.SetGovKeeper(app.GovKeeper) 557 app.MintKeeper.SetGovKeeper(app.GovKeeper) 558 app.Erc20Keeper.SetGovKeeper(app.GovKeeper) 559 560 // Create static IBC router, add transfer route, then set and seal it 561 ibcRouter := ibcporttypes.NewRouter() 562 // Set EVM hooks 563 //app.EvmKeeper.SetHooks(evm.NewLogProcessEvmHook(erc20.NewSendToIbcEventHandler(app.Erc20Keeper))) 564 // Set IBC hooks 565 //app.TransferKeeper = *app.TransferKeeper.SetHooks(erc20.NewIBCTransferHooks(app.Erc20Keeper)) 566 //transferModule := ibctransfer.NewAppModule(app.TransferKeeper, codecProxy) 567 568 //middle := transfer2.NewIBCModule(app.TransferKeeper) 569 transferModule := transfer.TNewTransferModule(app.TransferKeeper, codecProxy) 570 left := common.NewDisaleProxyMiddleware() 571 middle := ibctransfer.NewIBCModule(app.TransferKeeper, transferModule.AppModule) 572 right := ibcfee.NewIBCMiddleware(middle, app.IBCFeeKeeper) 573 transferStack := ibcporttypes.NewFacadedMiddleware(left, 574 ibccommon.DefaultFactory(tmtypes.HigherThanVenus4, ibc.IBCV4, right), 575 ibccommon.DefaultFactory(tmtypes.HigherThanVenus1, ibc.IBCV2, middle)) 576 577 ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack) 578 579 mockModule := mock.NewAppModule(scopedIBCMockKeeper, &v2keeper.PortKeeper) 580 mockIBCModule := mock.NewIBCModule(&mockModule, mock.NewMockIBCApp(mock.ModuleName, scopedIBCMockKeeper)) 581 ibcRouter.AddRoute(mock.ModuleName, mockIBCModule) 582 // The mock module is used for testing IBC 583 //mockIBCModule := mock.NewIBCModule(&mockModule, mock.NewMockIBCApp(mock.ModuleName, scopedIBCMockKeeper)) 584 585 var icaControllerStack ibcporttypes.IBCModule 586 icaControllerStack = mock.NewIBCModule(&mockModule, mock.NewMockIBCApp("", scopedICAMockKeeper)) 587 app.ICAAuthModule = icaControllerStack.(mock.IBCModule) 588 icaControllerStack = icacontroller.NewIBCMiddleware(icaControllerStack, app.ICAControllerKeeper) 589 icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper) 590 591 var icaHostStack ibcporttypes.IBCModule 592 icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper) 593 icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper) 594 // fee 595 feeMockModule := mock.NewIBCModule(&mockModule, mock.NewMockIBCApp(MockFeePort, scopedFeeMockKeeper)) 596 app.FeeMockModule = feeMockModule 597 feeWithMockModule := ibcfee.NewIBCMiddleware(feeMockModule, app.IBCFeeKeeper) 598 ibcRouter.AddRoute(MockFeePort, feeWithMockModule) 599 600 ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack) 601 ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostStack) 602 ibcRouter.AddRoute(icamauthtypes.ModuleName, icaControllerStack) 603 ibcRouter.AddRoute(mock.ModuleName+icacontrollertypes.SubModuleName, icaControllerStack) // ica with mock auth module stack route to ica (top level of middleware stack) 604 //ibcRouter.AddRoute(ibcmock.ModuleName, mockModule) 605 v2keeper.SetRouter(ibcRouter) 606 607 // register the staking hooks 608 // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks 609 app.StakingKeeper = *stakingKeeper.SetHooks( 610 staking.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), 611 ) 612 613 homeDir := viper.GetString(cli.HomeFlag) 614 wasmDir := filepath.Join(homeDir, "wasm") 615 wasmConfig, err := wasm.ReadWasmConfig() 616 if err != nil { 617 panic(fmt.Sprintf("error while reading wasm config: %s", err)) 618 } 619 620 // The last arguments can contain custom message handlers, and custom query handlers, 621 // if we want to allow any custom callbacks 622 supportedFeatures := wasm.SupportedFeatures 623 app.wasmKeeper = wasm.NewKeeper( 624 app.marshal, 625 keys[wasm.StoreKey], 626 app.subspaces[wasm.ModuleName], 627 &app.AccountKeeper, 628 bank.NewBankKeeperAdapter(app.BankKeeper), 629 v2keeper.ChannelKeeper, 630 &v2keeper.PortKeeper, 631 nil, 632 app.TransferKeeper, 633 app.MsgServiceRouter(), 634 app.GRPCQueryRouter(), 635 wasmDir, 636 wasmConfig, 637 supportedFeatures, 638 ) 639 640 // NOTE: Any module instantiated in the module manager that is later modified 641 // must be passed by reference here. 642 app.mm = module.NewManager( 643 genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx), 644 auth.NewAppModule(app.AccountKeeper), 645 bank.NewAppModule(app.BankKeeper, app.AccountKeeper, app.SupplyKeeper), 646 crisis.NewAppModule(&app.CrisisKeeper), 647 supply.NewAppModule(app.SupplyKeeper.Keeper, app.AccountKeeper), 648 gov.NewAppModule(app.GovKeeper, app.SupplyKeeper), 649 mint.NewAppModule(app.MintKeeper), 650 slashing.NewAppModule(app.SlashingKeeper, app.AccountKeeper, app.StakingKeeper), 651 distr.NewAppModule(app.DistrKeeper, app.SupplyKeeper), 652 staking2.TNewStakingModule(app.StakingKeeper, app.AccountKeeper, app.SupplyKeeper), 653 evidence.NewAppModule(app.EvidenceKeeper), 654 evm2.TNewEvmModuleAdapter(app.EvmKeeper, &app.AccountKeeper), 655 token.NewAppModule(commonversion.ProtocolVersionV0, app.TokenKeeper, app.SupplyKeeper), 656 dex.NewAppModule(commonversion.ProtocolVersionV0, app.DexKeeper, app.SupplyKeeper), 657 order.NewAppModule(commonversion.ProtocolVersionV0, app.OrderKeeper, app.SupplyKeeper), 658 ammswap.NewAppModule(app.SwapKeeper), 659 farm.NewAppModule(app.FarmKeeper), 660 params.NewAppModule(app.ParamsKeeper), 661 // ibc 662 //ibc.NewAppModule(app.IBCKeeper), 663 core.NewIBCCOreAppModule(app.IBCKeeper), 664 //capabilityModule.NewAppModule(codecProxy, *app.CapabilityKeeper), 665 capability.TNewCapabilityModuleAdapter(codecProxy, *app.CapabilityKeeper), 666 transferModule, 667 erc20.NewAppModule(app.Erc20Keeper), 668 mockModule, 669 wasm.NewAppModule(*app.marshal, &app.wasmKeeper), 670 fee.NewTestFeeAppModule(app.IBCFeeKeeper), 671 ica2.NewTestICAModule(codecProxy, &app.ICAControllerKeeper, &app.ICAHostKeeper), 672 icamauth.NewAppModule(codecProxy, app.ICAMauthKeeper), 673 ) 674 675 // During begin block slashing happens after distr.BeginBlocker so that 676 // there is nothing left over in the validator fee pool, so as to keep the 677 // CanWithdrawInvariant invariant. 678 app.mm.SetOrderBeginBlockers( 679 bank.ModuleName, 680 capabilitytypes.ModuleName, 681 order.ModuleName, 682 token.ModuleName, 683 dex.ModuleName, 684 mint.ModuleName, 685 distr.ModuleName, 686 slashing.ModuleName, 687 staking.ModuleName, 688 farm.ModuleName, 689 evidence.ModuleName, 690 evm.ModuleName, 691 ibchost.ModuleName, 692 ibctransfertypes.ModuleName, 693 mock.ModuleName, 694 wasm.ModuleName, 695 ) 696 app.mm.SetOrderEndBlockers( 697 crisis.ModuleName, 698 gov.ModuleName, 699 dex.ModuleName, 700 order.ModuleName, 701 staking.ModuleName, 702 evm.ModuleName, 703 mock.ModuleName, 704 wasm.ModuleName, 705 ) 706 707 // NOTE: The genutils module must occur after staking so that pools are 708 // properly initialized with tokens from genesis accounts. 709 app.mm.SetOrderInitGenesis( 710 capabilitytypes.ModuleName, 711 auth.ModuleName, distr.ModuleName, staking.ModuleName, bank.ModuleName, 712 slashing.ModuleName, gov.ModuleName, mint.ModuleName, supply.ModuleName, 713 token.ModuleName, dex.ModuleName, order.ModuleName, ammswap.ModuleName, farm.ModuleName, 714 ibctransfertypes.ModuleName, 715 ibchost.ModuleName, 716 evm.ModuleName, crisis.ModuleName, genutil.ModuleName, params.ModuleName, evidence.ModuleName, 717 erc20.ModuleName, 718 mock.ModuleName, 719 wasm.ModuleName, 720 icatypes.ModuleName, ibcfeetypes.ModuleName, 721 ) 722 723 app.mm.RegisterInvariants(&app.CrisisKeeper) 724 app.mm.RegisterRoutes(app.Router(), app.QueryRouter()) 725 app.configurator = module.NewConfigurator(app.Codec(), app.MsgServiceRouter(), app.GRPCQueryRouter()) 726 app.mm.RegisterServices(app.configurator) 727 app.setupUpgradeModules() 728 729 // create the simulation manager and define the order of the modules for deterministic simulations 730 // 731 // NOTE: this is not required apps that don't use the simulator for fuzz testing 732 // transactions 733 app.sm = module.NewSimulationManager( 734 auth.NewAppModule(app.AccountKeeper), 735 bank.NewAppModule(app.BankKeeper, app.AccountKeeper, app.SupplyKeeper), 736 supply.NewAppModule(app.SupplyKeeper.Keeper, app.AccountKeeper), 737 gov.NewAppModule(app.GovKeeper, app.SupplyKeeper), 738 mint.NewAppModule(app.MintKeeper), 739 staking.NewAppModule(app.StakingKeeper, app.AccountKeeper, app.SupplyKeeper), 740 distr.NewAppModule(app.DistrKeeper, app.SupplyKeeper), 741 slashing.NewAppModule(app.SlashingKeeper, app.AccountKeeper, app.StakingKeeper), 742 params.NewAppModule(app.ParamsKeeper), // NOTE: only used for simulation to generate randomized param change proposals 743 ibc.NewAppModule(app.IBCKeeper), 744 wasm.NewAppModule(*app.marshal, &app.wasmKeeper), 745 ) 746 747 app.sm.RegisterStoreDecoders() 748 749 // initialize stores 750 app.MountKVStores(keys) 751 app.MountTransientStores(tkeys) 752 app.MountMemoryStores(memKeys) 753 754 // initialize BaseApp 755 app.SetInitChainer(app.InitChainer) 756 app.SetBeginBlocker(app.BeginBlocker) 757 app.WasmHandler = wasmkeeper.HandlerOption{ 758 WasmConfig: &wasmConfig, 759 TXCounterStoreKey: keys[wasm.StoreKey], 760 } 761 app.SetAnteHandler(ante.NewAnteHandler(app.AccountKeeper, app.EvmKeeper, app.SupplyKeeper, validateMsgHook(app.OrderKeeper), app.WasmHandler, app.IBCKeeper, app.StakingKeeper, app.ParamsKeeper)) 762 app.SetEndBlocker(app.EndBlocker) 763 app.SetGasRefundHandler(refund.NewGasRefundHandler(app.AccountKeeper, app.SupplyKeeper, app.EvmKeeper)) 764 app.SetAccNonceHandler(NewAccHandler(app.AccountKeeper)) 765 app.SetUpdateFeeCollectorAccHandler(updateFeeCollectorHandler(app.BankKeeper, app.SupplyKeeper.Keeper)) 766 app.SetParallelTxLogHandlers(fixLogForParallelTxHandler(app.EvmKeeper)) 767 app.SetPartialConcurrentHandlers(getTxFeeAndFromHandler(app.AccountKeeper)) 768 app.SetGetTxFeeHandler(getTxFeeHandler()) 769 app.SetEvmSysContractAddressHandler(NewEvmSysContractAddressHandler(app.EvmKeeper)) 770 app.SetEvmWatcherCollector(func(...sdk.IWatcher) {}) 771 772 if loadLatest { 773 err := app.LoadLatestVersion(app.keys[bam.MainStoreKey]) 774 if err != nil { 775 tmos.Exit(err.Error()) 776 } 777 } 778 779 app.ScopedIBCKeeper = scopedIBCKeeper 780 app.ScopedTransferKeeper = scopedTransferKeeper 781 782 // NOTE: the IBC mock keeper and application module is used only for testing core IBC. Do 783 // note replicate if you do not need to test core IBC or light clients. 784 app.ScopedIBCMockKeeper = scopedIBCMockKeeper 785 app.ScopedICAMockKeeper = scopedICAMockKeeper 786 app.ScopedICAHostKeeper = scopedICAHostKeeper 787 788 return app 789 } 790 791 func updateFeeCollectorHandler(bk bank.Keeper, sk supply.Keeper) sdk.UpdateFeeCollectorAccHandler { 792 return func(ctx sdk.Context, balance sdk.Coins, txFeesplit []*sdk.FeeSplitInfo) error { 793 return bk.SetCoins(ctx, sk.GetModuleAccount(ctx, auth.FeeCollectorName).GetAddress(), balance) 794 } 795 } 796 797 func fixLogForParallelTxHandler(ek *evm.Keeper) sdk.LogFix { 798 return func(tx []sdk.Tx, logIndex []int, hasEnterEvmTx []bool, anteErrs []error, resp []abci.ResponseDeliverTx) (logs [][]byte) { 799 return ek.FixLog(tx, logIndex, hasEnterEvmTx, anteErrs, resp) 800 } 801 } 802 func evmTxVerifySigHandler(chainID string, blockHeight int64, evmTx *evmtypes.MsgEthereumTx) error { 803 chainIDEpoch, err := ethermint.ParseChainID(chainID) 804 if err != nil { 805 return err 806 } 807 err = evmTx.VerifySig(chainIDEpoch, blockHeight) 808 if err != nil { 809 return err 810 } 811 return nil 812 } 813 func getTxFeeAndFromHandler(ak auth.AccountKeeper) sdk.GetTxFeeAndFromHandler { 814 return func(ctx sdk.Context, tx sdk.Tx) (fee sdk.Coins, isEvm bool, from string, to string, err error) { 815 if evmTx, ok := tx.(*evmtypes.MsgEthereumTx); ok { 816 isEvm = true 817 err = evmTxVerifySigHandler(ctx.ChainID(), ctx.BlockHeight(), evmTx) 818 if err != nil { 819 return 820 } 821 fee = evmTx.GetFee() 822 from = evmTx.BaseTx.From 823 if len(from) > 2 { 824 from = strings.ToLower(from[2:]) 825 } 826 if evmTx.To() != nil { 827 to = strings.ToLower(evmTx.To().String()[2:]) 828 } 829 } else if feeTx, ok := tx.(authante.FeeTx); ok { 830 fee = feeTx.GetFee() 831 feePayer := feeTx.FeePayer(ctx) 832 feePayerAcc := ak.GetAccount(ctx, feePayer) 833 from = hex.EncodeToString(feePayerAcc.GetAddress()) 834 } 835 836 return 837 } 838 } 839 840 func getTxFeeHandler() sdk.GetTxFeeHandler { 841 return func(tx sdk.Tx) (fee sdk.Coins) { 842 if feeTx, ok := tx.(authante.FeeTx); ok { 843 fee = feeTx.GetFee() 844 } 845 846 return 847 } 848 } 849 850 func (app *SimApp) SetOption(req abci.RequestSetOption) (res abci.ResponseSetOption) { 851 if req.Key == "CheckChainID" { 852 if err := fbexchain.IsValidateChainIdWithGenesisHeight(req.Value); err != nil { 853 app.Logger().Error(err.Error()) 854 panic(err) 855 } 856 err := fbexchain.SetChainId(req.Value) 857 if err != nil { 858 app.Logger().Error(err.Error()) 859 panic(err) 860 } 861 } 862 return app.BaseApp.SetOption(req) 863 } 864 865 func (app *SimApp) LoadStartVersion(height int64) error { 866 return app.LoadVersion(height, app.keys[bam.MainStoreKey]) 867 } 868 869 // Name returns the name of the App 870 func (app *SimApp) Name() string { return app.BaseApp.Name() } 871 872 // BeginBlocker updates every begin block 873 func (app *SimApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { 874 return app.mm.BeginBlock(ctx, req) 875 } 876 877 // EndBlocker updates every end block 878 func (app *SimApp) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { 879 // if appconfig.GetFecConfig().GetEnableDynamicGp() { 880 // GlobalGpIndex = CalBlockGasPriceIndex(app.blockGasPrice, appconfig.GetFecConfig().GetDynamicGpWeight()) 881 // app.blockGasPrice = app.blockGasPrice[:0] 882 // } 883 884 return app.mm.EndBlock(ctx, req) 885 } 886 887 // InitChainer updates at chain initialization 888 func (app *SimApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { 889 890 var genesisState simapp.GenesisState 891 //app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) 892 app.marshal.GetCdc().MustUnmarshalJSON(req.AppStateBytes, &genesisState) 893 return app.mm.InitGenesis(ctx, genesisState) 894 } 895 896 // LoadHeight loads state at a particular height 897 func (app *SimApp) LoadHeight(height int64) error { 898 return app.LoadVersion(height, app.keys[bam.MainStoreKey]) 899 } 900 901 // ModuleAccountAddrs returns all the app's module account addresses. 902 func (app *SimApp) ModuleAccountAddrs() map[string]bool { 903 modAccAddrs := make(map[string]bool) 904 for acc := range maccPerms { 905 if acc == mock.ModuleName { 906 continue 907 } 908 modAccAddrs[supply.NewModuleAddress(acc).String()] = true 909 } 910 911 return modAccAddrs 912 } 913 914 // SimulationManager implements the SimulationApp interface 915 func (app *SimApp) SimulationManager() *module.SimulationManager { 916 return app.sm 917 } 918 919 // GetKey returns the KVStoreKey for the provided store key. 920 // 921 // NOTE: This is solely to be used for testing purposes. 922 func (app *SimApp) GetKey(storeKey string) *sdk.KVStoreKey { 923 return app.keys[storeKey] 924 } 925 926 func (app *SimApp) GetMemKey(storeKey string) *sdk.MemoryStoreKey { 927 return app.memKeys[storeKey] 928 } 929 930 func (app *SimApp) GetBaseApp() *bam.BaseApp { 931 return app.BaseApp 932 } 933 934 func (app *SimApp) GetStakingKeeper() staking.Keeper { 935 return app.StakingKeeper 936 } 937 func (app *SimApp) GetIBCKeeper() *ibckeeper.Keeper { 938 return app.IBCKeeper.V2Keeper 939 } 940 func (app *SimApp) GetFacadedKeeper() *ibc.Keeper { 941 return app.IBCKeeper 942 } 943 944 func (app *SimApp) GetScopedIBCKeeper() (cap capabilitykeeper.ScopedKeeper) { 945 cap = app.ibcScopeKeep 946 return 947 } 948 949 func (app *SimApp) AppCodec() *codec.CodecProxy { 950 return app.marshal 951 } 952 953 func (app *SimApp) LastCommitID() sdk.CommitID { 954 return app.BaseApp.GetCMS().LastCommitID() 955 } 956 957 func (app *SimApp) LastBlockHeight() int64 { 958 return app.GetCMS().LastCommitID().Version 959 } 960 961 func (app *SimApp) Codec() *codec.Codec { 962 return app.marshal.GetCdc() 963 } 964 965 func (app *SimApp) Marshal() *codec.CodecProxy { 966 return app.marshal 967 } 968 969 // GetSubspace returns a param subspace for a given module name. 970 // 971 // NOTE: This is solely to be used for testing purposes. 972 func (app *SimApp) GetSubspace(moduleName string) params.Subspace { 973 return app.subspaces[moduleName] 974 } 975 976 var protoCodec = encoding.GetCodec(proto.Name) 977 978 func makeInterceptors() map[string]bam.Interceptor { 979 m := make(map[string]bam.Interceptor) 980 m["/cosmos.tx.v1beta1.Service/Simulate"] = bam.NewRedirectInterceptor("app/simulate") 981 m["/cosmos.bank.v1beta1.Query/AllBalances"] = bam.NewRedirectInterceptor("custom/bank/grpc_balances") 982 m["/cosmos.staking.v1beta1.Query/Params"] = bam.NewRedirectInterceptor("custom/staking/params4ibc") 983 return m 984 } 985 986 // GetMaccPerms returns a copy of the module account permissions 987 func GetMaccPerms() map[string][]string { 988 dupMaccPerms := make(map[string][]string) 989 for k, v := range maccPerms { 990 dupMaccPerms[k] = v 991 } 992 993 return dupMaccPerms 994 } 995 996 func validateMsgHook(orderKeeper order.Keeper) ante.ValidateMsgHandler { 997 return func(newCtx sdk.Context, msgs []sdk.Msg) error { 998 999 wrongMsgErr := sdk.ErrUnknownRequest( 1000 "It is not allowed that a transaction with more than one message contains order or evm message") 1001 var err error 1002 1003 for _, msg := range msgs { 1004 switch assertedMsg := msg.(type) { 1005 case order.MsgNewOrders: 1006 if len(msgs) > 1 { 1007 return wrongMsgErr 1008 } 1009 _, err = order.ValidateMsgNewOrders(newCtx, orderKeeper, assertedMsg) 1010 case order.MsgCancelOrders: 1011 if len(msgs) > 1 { 1012 return wrongMsgErr 1013 } 1014 err = order.ValidateMsgCancelOrders(newCtx, orderKeeper, assertedMsg) 1015 case *evmtypes.MsgEthereumTx: 1016 if len(msgs) > 1 { 1017 return wrongMsgErr 1018 } 1019 } 1020 1021 if err != nil { 1022 return err 1023 } 1024 } 1025 return nil 1026 } 1027 } 1028 1029 func NewAccHandler(ak auth.AccountKeeper) sdk.AccNonceHandler { 1030 return func( 1031 ctx sdk.Context, addr sdk.AccAddress, 1032 ) uint64 { 1033 return ak.GetAccount(ctx, addr).GetSequence() 1034 } 1035 } 1036 1037 func NewEvmSysContractAddressHandler(ak *evm.Keeper) sdk.EvmSysContractAddressHandler { 1038 if ak == nil { 1039 panic("NewEvmSysContractAddressHandler ak is nil") 1040 } 1041 return func( 1042 ctx sdk.Context, addr sdk.AccAddress, 1043 ) bool { 1044 if addr.Empty() { 1045 return false 1046 } 1047 return ak.IsMatchSysContractAddress(ctx, addr) 1048 } 1049 } 1050 1051 func PreRun(ctx *server.Context) error { 1052 // set the dynamic config 1053 appconfig.RegisterDynamicConfig(ctx.Logger.With("module", "config")) 1054 1055 // check start flag conflicts 1056 err := sanity.CheckStart() 1057 if err != nil { 1058 return err 1059 } 1060 1061 // set config by node mode 1062 //setNodeConfig(ctx) 1063 1064 //download pprof 1065 appconfig.PprofDownload(ctx) 1066 1067 // pruning options 1068 _, err = server.GetPruningOptionsFromFlags() 1069 if err != nil { 1070 return err 1071 } 1072 // repair state on start 1073 // if viper.GetBool(FlagEnableRepairState) { 1074 // repairStateOnStart(ctx) 1075 // } 1076 1077 // init tx signature cache 1078 tmtypes.InitSignatureCache() 1079 return nil 1080 } 1081 1082 func (app *SimApp) setupUpgradeModules() { 1083 heightTasks, paramMap, cf, pf, vf := app.CollectUpgradeModules(app.mm) 1084 1085 app.heightTasks = heightTasks 1086 1087 app.GetCMS().AppendCommitFilters(cf) 1088 app.GetCMS().AppendPruneFilters(pf) 1089 app.GetCMS().AppendVersionFilters(vf) 1090 1091 vs := app.subspaces 1092 for k, vv := range paramMap { 1093 supace, exist := vs[k] 1094 if !exist { 1095 continue 1096 } 1097 vs[k] = supace.LazyWithKeyTable(subspace.NewKeyTable(vv.ParamSetPairs()...)) 1098 } 1099 } 1100 1101 func (o *SimApp) TxConfig() client.TxConfig { 1102 return o.txconfig 1103 } 1104 1105 func (o *SimApp) CollectUpgradeModules(m *module.Manager) (map[int64]*upgradetypes.HeightTasks, 1106 map[string]params.ParamSet, []types.StoreFilter, []types.StoreFilter, []types.VersionFilter) { 1107 hm := make(map[int64]*upgradetypes.HeightTasks) 1108 paramsRet := make(map[string]params.ParamSet) 1109 commitFiltreMap := make(map[*types.StoreFilter]struct{}) 1110 pruneFilterMap := make(map[*types.StoreFilter]struct{}) 1111 versionFilterMap := make(map[*types.VersionFilter]struct{}) 1112 1113 for _, mm := range m.Modules { 1114 if ada, ok := mm.(upgradetypes.UpgradeModule); ok { 1115 set := ada.RegisterParam() 1116 if set != nil { 1117 if _, exist := paramsRet[ada.ModuleName()]; !exist { 1118 paramsRet[ada.ModuleName()] = set 1119 } 1120 } 1121 h := ada.UpgradeHeight() 1122 if h > 0 { 1123 h++ 1124 } 1125 1126 cf := ada.CommitFilter() 1127 if cf != nil { 1128 if _, exist := commitFiltreMap[cf]; !exist { 1129 commitFiltreMap[cf] = struct{}{} 1130 } 1131 } 1132 pf := ada.PruneFilter() 1133 if pf != nil { 1134 if _, exist := pruneFilterMap[pf]; !exist { 1135 pruneFilterMap[pf] = struct{}{} 1136 } 1137 } 1138 vf := ada.VersionFilter() 1139 if vf != nil { 1140 if _, exist := versionFilterMap[vf]; !exist { 1141 versionFilterMap[vf] = struct{}{} 1142 } 1143 } 1144 1145 t := ada.RegisterTask() 1146 if t == nil { 1147 continue 1148 } 1149 if err := t.ValidateBasic(); nil != err { 1150 panic(err) 1151 } 1152 taskList := hm[h] 1153 if taskList == nil { 1154 v := make(upgradetypes.HeightTasks, 0) 1155 taskList = &v 1156 hm[h] = taskList 1157 } 1158 *taskList = append(*taskList, t) 1159 } 1160 } 1161 1162 for _, v := range hm { 1163 sort.Sort(*v) 1164 } 1165 1166 commitFilters := make([]types.StoreFilter, 0) 1167 pruneFilters := make([]types.StoreFilter, 0) 1168 versionFilters := make([]types.VersionFilter, 0) 1169 for pointerFilter, _ := range commitFiltreMap { 1170 commitFilters = append(commitFilters, *pointerFilter) 1171 } 1172 for pointerFilter, _ := range pruneFilterMap { 1173 pruneFilters = append(pruneFilters, *pointerFilter) 1174 } 1175 for pointerFilter, _ := range versionFilterMap { 1176 versionFilters = append(versionFilters, *pointerFilter) 1177 } 1178 1179 return hm, paramsRet, commitFilters, pruneFilters, versionFilters 1180 } 1181 1182 // GetModuleManager returns the app module manager 1183 // NOTE: used for testing purposes 1184 func (app *SimApp) GetModuleManager() *module.Manager { 1185 return app.mm 1186 }