> For the complete documentation index, see [llms.txt](https://seinetwork.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://seinetwork.gitbook.io/docs/smart-contracts-and-local-development/dex-module-tutorial.md).

# Инструкция по модулю 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 
}
```
