dex

package
v0.0.0-...-f42d900 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 27, 2023 License: Apache-2.0 Imports: 43 Imported by: 0

README

Abstract

Provides fast order matching for CosmWasm contracts.

Contents

dex provides order placement/cancellation/settlement capabilities for registered contracts, as well as exchange price resulting from the order matching. The implementation of the exchange logic and store writes happen at the end of each block, based on in-memory data passed on by dex transactions in the same block. In other words, DeliverTx only adds data to memory (a custom data structure, not Cosmos's cache store), and EndBlock uses those in-memory data to perform batched order matching. The EndBlock order matching process also involves calling Sudo endpoints defined on the registerd contracts, as long as those endpoints conform with the expected interface, so that the registered contracts can perform custom logic based on the exchange information.

Concepts

Contract Registration A contract can be registered with MsgRegisterContract type. There are a few related concepts:

For dex to perform order matching for a registered contract, it MUST define 3 Sudo endpoints:

  • "bulk_order_placements": payload expected can be found in [x/dex/types/order_placement.go]
  • "bulk_order_cancellations": payload expected can be found in [x/dex/types/order_cancellation.go]
  • "settlement": payload expected can be found in [x/dex/types/settlement.go] If any of the three endpoints is missing, or if the endpoint is ill-defined, dex will skip the contract's order matching.

Asset Pair Registration

A contract may define one or more tradable pairs with dex. For example, a spot trading contract may define a pair with price denomination USDC and asset denomination BTC. The exact semantics for asset pair registration can be found in the Governance section below. A contract with no registered pair is valid - it simply won't have any trading activity in dex.

Rent

A contract must deposit a certain amount of usei into dex upon registration or through subsequent top-ups. Those usei, also known as rent, will be consumed when the contract's Sudo endpoints are called based on the gas meter reading, and distributed to Sei validators. Note that if a Sudo endpoint fails, it would still charge rent for whatever the gas meter has already recorded before the failure happens.

Contract Dependencies

A contract may dispatch messages to other contracts as part of its Sudo call responses. If that is the case, the contract must declare those other contracts as Dependencies in its registration. No circular dependency is allowed. dex will check if a dispatched message is against a declared dependency contract, and reject it if it's not declared.

Batch Order Matching

Orders submitted via MsgPlaceOrders are aggregated at the end of a block and matched in batch.

Sequence

TODO

Clearing/Settlement Rules

TODO

State

Governance

Token pairs can be whitelisted with a contract address to the dex module via governance. The following is an example proposal json to whitelist a token pair.

    "dex": {
      "params": {
        "code_upload_access": {
          "permission": "Everybody"
        },
        "instantiate_default_permission": "Everybody"
      }
    },  

Messages

Events

Parameters

Transactions

Queries

Documentation

Index

Constants

View Source
const DexGasFeeUnit = "usei"

Variables

This section is empty.

Functions

func ExportGenesis

func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState

ExportGenesis returns the dex module's exported genesis.

func HandleAddAssetMetadataProposal

func HandleAddAssetMetadataProposal(ctx sdk.Context, k *keeper.Keeper, p *types.AddAssetMetadataProposal) error

func InitGenesis

func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState)

InitGenesis initializes the dex module's state from a provided genesis state.

func IsDecimalMultipleOf

func IsDecimalMultipleOf(a, b sdk.Dec) bool

Check whether decimal a is multiple of decimal b

func IsMarketOrder

func IsMarketOrder(order *types.Order) bool

Check whether order is market order type

func NewHandler

func NewHandler(k keeper.Keeper) sdk.Handler

NewHandler ...

func NewProposalHandler

func NewProposalHandler(k keeper.Keeper) govtypes.Handler

Types

type AppModule

type AppModule struct {
	AppModuleBasic
	// contains filtered or unexported fields
}

AppModule implements the AppModule interface for the capability module.

func NewAppModule

func NewAppModule(
	cdc codec.Codec,
	keeper keeper.Keeper,
	accountKeeper types.AccountKeeper,
	bankKeeper types.BankKeeper,
	wasmKeeper wasm.Keeper,
	tracingInfo *tracing.Info,
) AppModule

func (AppModule) BeginBlock

func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock)

BeginBlock executes all ABCI BeginBlock logic respective to the capability module.

func (AppModule) ConsensusVersion

func (AppModule) ConsensusVersion() uint64

ConsensusVersion implements ConsensusVersion.

func (AppModule) EndBlock

func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) (ret []abci.ValidatorUpdate)

EndBlock executes all ABCI EndBlock logic respective to the capability module. It returns no validator updates.

func (AppModule) ExportGenesis

func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage

ExportGenesis returns the capability module's exported genesis state as raw JSON bytes.

func (AppModule) GenerateGenesisState

func (AppModule) GenerateGenesisState(simState *module.SimulationState)

GenerateGenesisState creates a randomized GenState of the module

func (AppModule) InitGenesis

func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate

InitGenesis performs the capability module's genesis initialization It returns no validator updates.

func (AppModule) LegacyQuerierHandler

func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier

LegacyQuerierHandler returns the capability module's Querier.

func (AppModule) Name

func (am AppModule) Name() string

Name returns the capability module's name.

func (AppModule) ProposalContents

ProposalContents doesn't return any content functions for governance proposals

func (AppModule) QuerierRoute

func (AppModule) QuerierRoute() string

QuerierRoute returns the capability module's query routing key.

func (AppModule) RandomizedParams

func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange

RandomizedParams creates randomized param changes for the simulator

func (AppModule) RegisterInvariants

func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry)

RegisterInvariants registers the capability module's invariants.

func (AppModule) RegisterServices

func (am AppModule) RegisterServices(cfg module.Configurator)

RegisterServices registers a GRPC query service to respond to the module-specific GRPC queries.

func (AppModule) RegisterStoreDecoder

func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry)

RegisterStoreDecoder registers a decoder

func (AppModule) Route

func (am AppModule) Route() sdk.Route

Route returns the capability module's message routing key.

func (AppModule) WeightedOperations

func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation

WeightedOperations returns the all the gov module operations with their respective weights.

type AppModuleBasic

type AppModuleBasic struct {
	// contains filtered or unexported fields
}

AppModuleBasic implements the AppModuleBasic interface for the capability module.

func NewAppModuleBasic

func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic

func (AppModuleBasic) DefaultGenesis

func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage

DefaultGenesis returns the capability module's default genesis state.

func (AppModuleBasic) GetQueryCmd

func (AppModuleBasic) GetQueryCmd() *cobra.Command

GetQueryCmd returns the capability module's root query command.

func (AppModuleBasic) GetTxCmd

func (a AppModuleBasic) GetTxCmd() *cobra.Command

GetTxCmd returns the capability module's root tx command.

func (AppModuleBasic) Name

func (AppModuleBasic) Name() string

Name returns the capability module's name.

func (AppModuleBasic) RegisterCodec

func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino)

func (AppModuleBasic) RegisterGRPCGatewayRoutes

func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux)

RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module.

func (AppModuleBasic) RegisterInterfaces

func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry)

RegisterInterfaces registers the module's interface types

func (AppModuleBasic) RegisterLegacyAminoCodec

func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino)

func (AppModuleBasic) RegisterRESTRoutes

func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router)

RegisterRESTRoutes registers the capability module's REST service handlers.

func (AppModuleBasic) ValidateGenesis

ValidateGenesis performs genesis state validation for the capability module.

type CheckDexGasDecorator

type CheckDexGasDecorator struct {
	// contains filtered or unexported fields
}

func NewCheckDexGasDecorator

func NewCheckDexGasDecorator(dexKeeper keeper.Keeper, checkTxMemState *dexcache.MemState) CheckDexGasDecorator

func (CheckDexGasDecorator) AnteDeps

func (d CheckDexGasDecorator) AnteDeps(txDeps []sdkacltypes.AccessOperation, tx sdk.Tx, next sdk.AnteDepGenerator) (newTxDeps []sdkacltypes.AccessOperation, err error)

func (CheckDexGasDecorator) AnteHandle

func (d CheckDexGasDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)

for a TX that contains dex gas-incurring messages, check if it provides enough gas based on dex params

type TickSizeMultipleDecorator

type TickSizeMultipleDecorator struct {
	// contains filtered or unexported fields
}

TickSizeMultipleDecorator check if the place order tx's price is multiple of tick size

func NewTickSizeMultipleDecorator

func NewTickSizeMultipleDecorator(dexKeeper keeper.Keeper) TickSizeMultipleDecorator

NewTickSizeMultipleDecorator returns new ticksize multiple check decorator instance

func (TickSizeMultipleDecorator) AnteHandle

func (tsmd TickSizeMultipleDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)

AnteHandle is the interface called in RunTx() function, which CheckTx() calls with the runTxModeCheck mode

func (TickSizeMultipleDecorator) CheckTickSizeMultiple

func (tsmd TickSizeMultipleDecorator) CheckTickSizeMultiple(ctx sdk.Context, msgs []sdk.Msg) error

CheckTickSizeMultiple checks whether the msgs comply with ticksize

Directories

Path Synopsis
client
Package types is a reverse proxy.
Package types is a reverse proxy.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL