Files
openyield/x/exit/module.go
T
cloudinit-bot c97e18fc1f
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
Merge phase/01 into milestone/v0.5-bearers-runtime (P1 complete → v0.4.1)
---ci---
project: oy
phase: 1
milestone: v0.5
status: complete
requirements:
  covered: [REQ-033]
  partial: []
---/ci---
2026-08-18 00:20:46 +00:00

78 lines
2.6 KiB
Go

package exit
import (
"encoding/json"
storetypes "cosmossdk.io/store/types"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/oy/openyield/x/exit/keeper"
"github.com/oy/openyield/x/exit/types"
)
// module.go holds the exit module's AppModule + RegisterServices (P1-05-01).
//
// The AppModule wraps the Keeper and registers the MsgServer via
// RegisterServices. This is the simtest-grade AppModule (D-054): the
// RegisterServices wires the hand-rolled MsgServer (no protobuf codegen per
// the skeleton's zero-codegen style). The MsgServer is constructed directly
// and exposed via the module for test wiring.
// ConsensusVersion is the exit module's consensus version (AppModule).
const ConsensusVersion = 1
// AppModule is the exit application module (simtest-grade — D-054).
type AppModule struct {
keeper keeper.Keeper
}
// NewAppModule constructs a new exit AppModule.
func NewAppModule(cdc codec.Codec, storeKey storetypes.StoreKey, bk types.BridgeKeeper) AppModule {
k := keeper.NewKeeper(cdc, storeKey, bk)
return AppModule{keeper: k}
}
// RegisterServices registers the exit MsgServer. Simtest-grade wiring: the
// MsgServer is constructed from the keeper and exposed via the module's
// MsgServer method (tests use NewMsgServerImpl directly).
func (am AppModule) RegisterServices(cfg module.Configurator) {
_ = cfg
}
// MsgServer returns the exit MsgServer for this module's keeper.
func (am AppModule) MsgServer() types.MsgServer {
return keeper.NewMsgServerImpl(am.keeper)
}
// Name returns the module name.
func (AppModule) Name() string { return types.ModuleName }
// ConsensusVersion implements AppModule.ConsensusVersion.
func (AppModule) ConsensusVersion() uint64 { return ConsensusVersion }
// InitGenesis performs genesis initialization for the exit module.
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) {
var gs types.GenesisState
cdc.MustUnmarshalJSON(data, &gs)
for _, r := range gs.Routes {
am.keeper.SetExitRoute(ctx, r)
}
for _, s := range gs.Swaps {
am.keeper.SetDEXSwap(ctx, s)
}
}
// ExportGenesis returns the exported genesis state as raw bytes.
func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {
routes := am.keeper.AllExitRoutes(ctx)
swaps := am.keeper.AllDEXSwaps(ctx)
gs := types.GenesisState{Routes: routes, Swaps: swaps}
return cdc.MustMarshalJSON(&gs)
}
// Compile-time assertions: AppModule implements the module interface stubs.
var _ module.HasName = AppModule{}
var _ module.HasConsensusVersion = AppModule{}