/
module.go
147 lines (120 loc) · 5.08 KB
/
module.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package polygon
import (
"encoding/json"
"fmt"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/gorilla/mux"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/spf13/cobra"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/functionx/fx-core/v2/x/crosschain"
crosschainkeeper "github.com/functionx/fx-core/v2/x/crosschain/keeper"
crosschainv020 "github.com/functionx/fx-core/v2/x/crosschain/legacy/v020"
crosschaintypes "github.com/functionx/fx-core/v2/x/crosschain/types"
types "github.com/functionx/fx-core/v2/x/polygon/types"
)
// type check to ensure the interface is properly implemented
var (
_ module.AppModule = AppModule{}
_ module.AppModuleBasic = AppModuleBasic{}
)
// AppModuleBasic object for module implementation
type AppModuleBasic struct{}
// Name implements app module basic
func (AppModuleBasic) Name() string { return types.ModuleName }
// RegisterLegacyAminoCodec implements app module basic
func (AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) {}
// DefaultGenesis implements app module basic
func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {
return cdc.MustMarshalJSON(types.DefaultGenesisState())
}
// ValidateGenesis implements app module basic
func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, data json.RawMessage) error {
var state crosschaintypes.GenesisState
if err := cdc.UnmarshalJSON(data, &state); err != nil {
return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err)
}
return state.ValidateBasic()
}
// RegisterRESTRoutes implements app module basic
func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {}
// GetQueryCmd implements app module basic
func (AppModuleBasic) GetQueryCmd() *cobra.Command {
return nil
}
// GetTxCmd implements app module basic
func (AppModuleBasic) GetTxCmd() *cobra.Command {
return nil
}
// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the distribution module.
// also implements app modeul basic
func (AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) {}
// RegisterInterfaces implements app bmodule basic
func (AppModuleBasic) RegisterInterfaces(_ codectypes.InterfaceRegistry) {}
// ----------------------------------------------------------------------------
// AppModule
// ----------------------------------------------------------------------------
// AppModule object for module implementation
type AppModule struct {
AppModuleBasic
keeper crosschainkeeper.Keeper
stakingKeeper crosschainv020.StakingKeeper
bankKeeper crosschainv020.BankKeeper
paramsKey sdk.StoreKey
legacyAmino *codec.LegacyAmino
}
// NewAppModule creates a new AppModule Object
func NewAppModule(keeper crosschainkeeper.Keeper, stakingKeeper crosschainv020.StakingKeeper, bankKeeper crosschainv020.BankKeeper, legacyAmino *codec.LegacyAmino, paramsKey sdk.StoreKey) AppModule {
return AppModule{
AppModuleBasic: AppModuleBasic{},
keeper: keeper,
stakingKeeper: stakingKeeper,
bankKeeper: bankKeeper,
paramsKey: paramsKey,
legacyAmino: legacyAmino,
}
}
// RegisterInvariants implements app module
func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}
// Route implements app module
func (am AppModule) Route() sdk.Route {
return sdk.Route{}
}
// QuerierRoute implements app module
func (am AppModule) QuerierRoute() string { return types.QuerierRoute }
// LegacyQuerierHandler returns the distribution module sdk.Querier.
func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier {
return crosschainkeeper.NewQuerier(am.keeper, legacyQuerierCdc)
}
// RegisterServices registers module services.
func (am AppModule) RegisterServices(cfg module.Configurator) {
m := crosschainkeeper.NewMigrator(am.keeper, am.stakingKeeper, am.bankKeeper, am.legacyAmino, am.paramsKey)
if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {
panic(err)
}
}
// InitGenesis initializes the genesis state for this module and implements app module.
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {
var genesisState crosschaintypes.GenesisState
cdc.MustUnmarshalJSON(data, &genesisState)
crosschain.InitGenesis(ctx, am.keeper, &genesisState)
return []abci.ValidatorUpdate{}
}
// ExportGenesis exports the current genesis state to a json.RawMessage
func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {
state := crosschain.ExportGenesis(ctx, am.keeper)
return cdc.MustMarshalJSON(state)
}
// ConsensusVersion implements AppModule/ConsensusVersion.
func (am AppModule) ConsensusVersion() uint64 {
return 2
}
// EndBlock implements app module
func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {
crosschain.EndBlocker(ctx, am.keeper)
return []abci.ValidatorUpdate{}
}