# Инструкция по модулю Dex

Модуль Dex отвечает за выставление ордеров и сопутствующий торговый функционал. Исходник кода можно найти здесь: <https://github.com/sei-protocol/sei-chain/tree/master/x/dex>

Чтобы начать работу с модулем Dex, необходимо использовать либо запрос (`query`), либо `tx` сообщение. Ниже приведены примеры того, как взаимодействовать с модулем. Также приводится краткий обзор некоторых общих перечислений и структур, используемых в Приложении. Обратите внимание, что команды необходимо использовать с такими флагами, как `--from, --chain_id, -fees, --gas, --broadcast-mode`, и т.д.

### Запросы

**GetTwaps**

**Описание**: получает взвешенные по времени средние цены определенных активов\
**Использование**: `seid q get-twaps $contract_addr $lookback`\
**Аргументы**: 1) адрес контракта (строка), 2) кол-во последних цен (uint64)\
**Возвращает**: `Twap[]`\
**Пример**: `seid q get-twaps $contract_addr 100 --from=$key_name --chain_id=sei_chain --fees=1000000usei --gas=50000000 --broadcast-mode=block`

**GetOrders**

**Описание**: получает заявки определенного аккаунта из книги заявок\
**Использование**: `seid q get-orders $contract_addr $account`\
**Аргументы**: 1) адрес контракта (строка), 2) аккаунт (строка)\
**Возвращает**: `Orders[]`\
**Пример**: `seid q get-orders $contract_addr $acc_addr --from=$key_name --chain_id=sei_chain --fees=1000000usei --gas=50000000 --broadcast-mode=block`

**GetOrderById**

**Описание**: получает определенную заявку по ID \
**Использование**: `seid q get-orders-by-id $contract_addr $price_denom $asset_denom $id`\
**Аргументы**: 1) адрес контракта (строка), 2) price\_denom - валюта (строка), 3) asset\_denom - токен (строка), 4) id (uint64) \
**Возвращает**: `Orders` \
**Пример**: `seid q get-orders-by-id $contract_addr 'USDC' 'ATOM' $id --from=$key_name --chain_id=sei_chain --fees=1000000usei --gas=50000000 --broadcast-mode=block`

### Сообщения

**PlaceOrders**

**Описание**: отправляет ордера в книгу ордеров\
**Использование**: `seid tx place-orders $contract_addr $orders --amount $coins (optional)`\
**Аргументы**: 1) адрес контракта (строка), 2) Список ордеров\
**Возвращает**: `uint64[] OrderIds`\
**Пример**: `seid tx dex place-orders $contract_addr 'LONG?1.01?5?USDC?ATOM?LIMIT?{"leverage":"1","position_effect":"Open"}' --amount=1000000000uusdc -y --from=$key_name --chain_id=sei_chain --fees=1000000usei --gas=50000000 --broadcast-mode=block`

{% hint style="info" %}
Аргументы ордера разделяются вопросительным знаком (?) и содержат следующие значения: направление ордера (long/short), цена, количество, значение валюты знаменателя заявки, значение валюты числителя заявки, тип ордера, данные ордера.
{% endhint %}

**CancelOrders**

**Описание**: массовая отмена ордеров\
**Использование**: `seid tx cancel-orders $contract_addr $cancellations` \
**Аргументы**: 1) адрес контракта (строка), 2) Список ордеров для отмены \
**Возвращает**: пустое значение (type MsgCancelOrdersResponse struct {}) \
**Пример**: `seid tx dex cancel-orders $contract_addr 'LONG?1.01?USDC?ATOM' --from=$key_name --chain_id=sei_chain --fees=1000000usei --gas=50000000 --broadcast-mode=block`

{% hint style="info" %}
Аргументы ордера разделяются вопросительным знаком (?) и содержат следующие значения: направление ордера (long/short), цена, значение валюты знаменателя заявки, значение валюты числителя заявки.
{% endhint %}

### Приложение

**Enums:**

```
enum PositionDirection {
    LONG = 0;
    SHORT = 1;
}

enum PositionEffect {
    OPEN = 0;
    CLOSE = 1;
}

enum OrderType {
    LIMIT = 0;
    MARKET = 1;
    LIQUIDATION = 2;
    FOKMARKET = 3; // fill-or-kill market order
}

enum OrderStatus {
    PLACED = 0;
    FAILED_TO_PLACE = 1;
    CANCELLED = 2;
    FULFILLED = 3;
}

enum CancellationInitiator {
    USER = 0;
    LIQUIDATED = 1;
}
```

**Структуры:**

Pair (торговая пара):

```
type Pair struct {
	PriceDenom string                                  
	AssetDenom string                                  
	Ticksize   *github_com_cosmos_cosmos_sdk_types.Dec 
}
```

Twap (средневзвешенная цена):

```
type Twap struct {
	Pair            *Pair                                  
	Twap            github_com_cosmos_cosmos_sdk_types.Dec 
	LookbackSeconds uint64                                 
}
```

Order (ордер):&#x20;

```
type Order struct {
	Id                uint64                                 
	Status            OrderStatus                            
	Account           string                                 
	ContractAddr      string                                 
	Price             github_com_cosmos_cosmos_sdk_types.Dec 
	Quantity          github_com_cosmos_cosmos_sdk_types.Dec 
	PriceDenom        string                                 
	AssetDenom        string                                 
	OrderType         OrderType                              
	PositionDirection PositionDirection                      
	Data              string                                 
	StatusDescription string                                 
}
```

Cancellation (отмена ордера):

```
type Cancellation struct {
	Id                uint64                                 
	Initiator         CancellationInitiator                  
	Creator           string                                 
	ContractAddr      string                                 
	PriceDenom        string                                 
	AssetDenom        string                                 
	PositionDirection PositionDirection                      
	Price             github_com_cosmos_cosmos_sdk_types.Dec 
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://seinetwork.gitbook.io/docs/smart-contracts-and-local-development/dex-module-tutorial.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
