-
Notifications
You must be signed in to change notification settings - Fork 12
/
keys.go
133 lines (118 loc) · 5.46 KB
/
keys.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package keepers
import (
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
ibctransfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
ibchost "github.com/cosmos/ibc-go/v6/modules/core/24-host"
"github.com/ethereum/go-ethereum/core/vm"
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
evmtypes "github.com/evmos/ethermint/x/evm/types"
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
fxtypes "github.com/functionx/fx-core/v5/types"
arbitrumtypes "github.com/functionx/fx-core/v5/x/arbitrum/types"
avalanchetypes "github.com/functionx/fx-core/v5/x/avalanche/types"
bsctypes "github.com/functionx/fx-core/v5/x/bsc/types"
erc20types "github.com/functionx/fx-core/v5/x/erc20/types"
ethtypes "github.com/functionx/fx-core/v5/x/eth/types"
precompilescrosschain "github.com/functionx/fx-core/v5/x/evm/precompiles/crosschain"
precompilesstaking "github.com/functionx/fx-core/v5/x/evm/precompiles/staking"
migratetypes "github.com/functionx/fx-core/v5/x/migrate/types"
optimismtypes "github.com/functionx/fx-core/v5/x/optimism/types"
polygontypes "github.com/functionx/fx-core/v5/x/polygon/types"
trontypes "github.com/functionx/fx-core/v5/x/tron/types"
)
func (appKeepers *AppKeepers) generateKeys() {
// Define what keys will be used in the cosmos-sdk key/value store.
// Cosmos-SDK modules each have a "key" that allows the application to reference what they've stored on the chain.
appKeepers.keys = sdk.NewKVStoreKeys(
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey,
evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey,
feegrant.StoreKey, authzkeeper.StoreKey,
bsctypes.StoreKey, polygontypes.StoreKey, avalanchetypes.StoreKey, ethtypes.StoreKey, trontypes.StoreKey,
arbitrumtypes.ModuleName, optimismtypes.ModuleName,
evmtypes.StoreKey, feemarkettypes.StoreKey,
erc20types.StoreKey, migratetypes.StoreKey,
)
// Define transient store keys
appKeepers.tkeys = sdk.NewTransientStoreKeys(paramstypes.TStoreKey, evmtypes.TransientKey, feemarkettypes.TransientKey)
// MemKeys are for information that is stored only in RAM.
appKeepers.memKeys = sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
}
func (appKeepers *AppKeepers) GetKVStoreKey() map[string]*storetypes.KVStoreKey {
return appKeepers.keys
}
func (appKeepers *AppKeepers) GetTransientStoreKey() map[string]*storetypes.TransientStoreKey {
return appKeepers.tkeys
}
func (appKeepers *AppKeepers) GetMemoryStoreKey() map[string]*storetypes.MemoryStoreKey {
return appKeepers.memKeys
}
// EvmPrecompiled set evm precompiled contracts
func (appKeepers *AppKeepers) EvmPrecompiled() {
precompiled := evmkeeper.BerlinPrecompiled()
// staking precompile
precompiled[precompilesstaking.GetAddress()] = func(ctx sdk.Context) vm.PrecompiledContract {
return precompilesstaking.NewPrecompiledContract(
ctx,
appKeepers.BankKeeper,
appKeepers.StakingKeeper,
appKeepers.DistrKeeper,
appKeepers.EvmKeeper,
)
}
// cross chain precompile
transferRouter := fxtypes.NewRouter().
AddRoute(ethtypes.ModuleName, appKeepers.EthKeeper).
AddRoute(bsctypes.ModuleName, appKeepers.BscKeeper).
AddRoute(polygontypes.ModuleName, appKeepers.PolygonKeeper).
AddRoute(trontypes.ModuleName, appKeepers.TronKeeper).
AddRoute(avalanchetypes.ModuleName, appKeepers.AvalancheKeeper).
AddRoute(arbitrumtypes.ModuleName, appKeepers.ArbitrumKeeper).
AddRoute(optimismtypes.ModuleName, appKeepers.OptimismKeeper)
precompiled[precompilescrosschain.GetAddress()] = func(ctx sdk.Context) vm.PrecompiledContract {
return precompilescrosschain.NewPrecompiledContract(
ctx,
appKeepers.BankKeeper,
appKeepers.EvmKeeper,
appKeepers.Erc20Keeper,
appKeepers.IBCTransferKeeper,
appKeepers.AccountKeeper,
transferRouter,
)
}
// set precompiled contracts
appKeepers.EvmKeeper.WithPrecompiled(precompiled)
}
// GetKey returns the KVStoreKey for the provided store key.
//
// NOTE: This is solely to be used for testing purposes.
func (appKeepers *AppKeepers) GetKey(storeKey string) *storetypes.KVStoreKey {
return appKeepers.keys[storeKey]
}
// GetTKey returns the TransientStoreKey for the provided store key.
//
// NOTE: This is solely to be used for testing purposes.
func (appKeepers *AppKeepers) GetTKey(storeKey string) *storetypes.TransientStoreKey {
return appKeepers.tkeys[storeKey]
}
// GetMemKey returns the MemStoreKey for the provided mem key.
//
// NOTE: This is solely used for testing purposes.
func (appKeepers *AppKeepers) GetMemKey(storeKey string) *storetypes.MemoryStoreKey {
return appKeepers.memKeys[storeKey]
}