Overview
This section is where we sketch the definition of the Nameservice module and application. It's to everyone's benefit if module structures follow a similar file hierarchy as the Nameservice module, or any module found in the SDK. In the case of Nameservice this roughly translates to
├── Nameservice
│ ├── Keeper.hs
│ ├── Messages.hs
│ ├── Query.hs
│ ├── Router.hs
│ └── Types.hs
├── Nameservice.hs
The contents of these modules are roughly as follows:
Nameservice.Types
- Core types and instances for the module, including events, custom errors, database types.Nameservice.Keeper
- Defines the module's effect system, it's database operations (if any), core utility.Nameservice.Message
- Defines the message types that the module must process (if any) and their validation instances.Nameservice.Query
- Defines the query server for handling state queries from clients.Nameservice.Router
- Defines the transaction router for the module.Namervice
Defines the module itself and re-exports any types or utils necessary for using this module as a dependency.
The reason why we suggest this is that each of these haskell modules is buiding up one of the core components of our definition of a module, and it provides a nice logical split between these pieces.