-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add layer2 crosschain module (#106)
Co-authored-by: fx0x55 <80245546+fx0x55@users.noreply.github.com>
- Loading branch information
1 parent
7cfe371
commit 179c9eb
Showing
12 changed files
with
283 additions
and
4 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package cli | ||
|
||
import ( | ||
"github.com/cosmos/cosmos-sdk/client" | ||
"github.com/spf13/cobra" | ||
|
||
"github.com/functionx/fx-core/v6/x/crosschain/client/cli" | ||
"github.com/functionx/fx-core/v6/x/layer2/types" | ||
) | ||
|
||
func GetQueryCmd() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: types.ModuleName, | ||
Short: "Querying commands for the layer2 module", | ||
DisableFlagParsing: true, | ||
SuggestionsMinimumDistance: 2, | ||
RunE: client.ValidateCmd, | ||
} | ||
cmd.AddCommand(cli.GetQuerySubCmds(types.ModuleName)...) | ||
return cmd | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package cli | ||
|
||
import ( | ||
"github.com/cosmos/cosmos-sdk/client" | ||
"github.com/spf13/cobra" | ||
|
||
"github.com/functionx/fx-core/v6/x/crosschain/client/cli" | ||
"github.com/functionx/fx-core/v6/x/layer2/types" | ||
) | ||
|
||
func GetTxCmd() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: types.ModuleName, | ||
Short: "Layer2 transaction subcommands", | ||
DisableFlagParsing: true, | ||
SuggestionsMinimumDistance: 2, | ||
RunE: client.ValidateCmd, | ||
} | ||
cmd.AddCommand(cli.GetTxSubCmds(types.ModuleName)...) | ||
return cmd | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
package layer2 | ||
|
||
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" | ||
|
||
crosschainkeeper "github.com/functionx/fx-core/v6/x/crosschain/keeper" | ||
crosschaintypes "github.com/functionx/fx-core/v6/x/crosschain/types" | ||
"github.com/functionx/fx-core/v6/x/layer2/client/cli" | ||
"github.com/functionx/fx-core/v6/x/layer2/types" | ||
) | ||
|
||
// type check to ensure the interface is properly implemented | ||
var ( | ||
_ module.AppModule = AppModule{} | ||
_ module.AppModuleBasic = AppModuleBasic{} | ||
_ module.EndBlockAppModule = AppModule{} | ||
) | ||
|
||
// ---------------------------------------------------------------------------- | ||
// AppModuleBasic | ||
// ---------------------------------------------------------------------------- | ||
|
||
// AppModuleBasic object for module implementation | ||
type AppModuleBasic struct{} | ||
|
||
// Name implements app module basic | ||
func (AppModuleBasic) Name() string { return types.ModuleName } | ||
|
||
// 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() | ||
} | ||
|
||
// RegisterLegacyAminoCodec implements app module basic | ||
func (AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) {} | ||
|
||
// RegisterRESTRoutes implements app module basic | ||
func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} | ||
|
||
// RegisterGRPCGatewayRoutes registers the gRPC Gateway | ||
func (AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) {} | ||
|
||
// GetQueryCmd implements app module basic | ||
func (AppModuleBasic) GetQueryCmd() *cobra.Command { | ||
return cli.GetQueryCmd() | ||
} | ||
|
||
// GetTxCmd implements app module basic | ||
func (AppModuleBasic) GetTxCmd() *cobra.Command { | ||
return cli.GetTxCmd() | ||
} | ||
|
||
// RegisterInterfaces implements app bmodule basic | ||
func (AppModuleBasic) RegisterInterfaces(_ codectypes.InterfaceRegistry) {} | ||
|
||
// ---------------------------------------------------------------------------- | ||
// AppModule | ||
// ---------------------------------------------------------------------------- | ||
|
||
// AppModule object for module implementation | ||
type AppModule struct { | ||
AppModuleBasic | ||
keeper crosschainkeeper.Keeper | ||
} | ||
|
||
// NewAppModule creates a new AppModule Object | ||
func NewAppModule(keeper crosschainkeeper.Keeper) AppModule { | ||
return AppModule{ | ||
AppModuleBasic: AppModuleBasic{}, | ||
keeper: keeper, | ||
} | ||
} | ||
|
||
// RegisterInvariants implements app module | ||
func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} | ||
|
||
// Deprecated: Route returns the message routing key | ||
func (am AppModule) Route() sdk.Route { | ||
return sdk.Route{} | ||
} | ||
|
||
// QuerierRoute implements app module | ||
func (am AppModule) QuerierRoute() string { return "" } | ||
|
||
// LegacyQuerierHandler returns no sdk.Querier | ||
func (am AppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier { | ||
return nil | ||
} | ||
|
||
// RegisterServices registers module services. | ||
func (am AppModule) RegisterServices(_ module.Configurator) {} | ||
|
||
// 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) | ||
|
||
crosschainkeeper.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 := crosschainkeeper.ExportGenesis(ctx, am.keeper) | ||
return cdc.MustMarshalJSON(state) | ||
} | ||
|
||
// ConsensusVersion implements AppModule/ConsensusVersion. | ||
func (am AppModule) ConsensusVersion() uint64 { | ||
return 1 | ||
} | ||
|
||
// EndBlock implements app module | ||
func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { | ||
am.keeper.EndBlocker(ctx) | ||
return []abci.ValidatorUpdate{} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package types | ||
|
||
import ( | ||
crosschaintypes "github.com/functionx/fx-core/v6/x/crosschain/types" | ||
) | ||
|
||
func DefaultGenesisState() *crosschaintypes.GenesisState { | ||
params := crosschaintypes.DefaultParams() | ||
params.GravityId = "fx-layer2-bridge" | ||
params.AverageExternalBlockTime = 2_000 | ||
return &crosschaintypes.GenesisState{ | ||
Params: params, | ||
} | ||
} |
Oops, something went wrong.