# Order
Структура ордера. Используется:
- при проверке исходящего ордера скриптом аккаунта или функцией-верификатором dApp-скрипта;
- в структуре InvokeScriptTransaction.
# Конструктор
В Стандартной библиотеке версии 6 и 7:
Order(id: ByteVector, matcherPublicKey: ByteVector, assetPair: AssetPair, orderType: Buy|Sell, price: Int, amount: Int, timestamp: Int, expiration: Int, matcherFee: Int, matcherFeeAssetId: ByteVector|Unit, sender: Address, senderPublicKey: ByteVector, bodyBytes: ByteVector, proofs: List[ByteVector])
В Стандартной библиотеке версии 8:
Order(id: ByteVector, matcherPublicKey: ByteVector, assetPair: AssetPair, orderType: Buy|Sell, price: Int, amount: Int, timestamp: Int, expiration: Int, matcherFee: Int, matcherFeeAssetId: ByteVector|Unit, sender: Address, senderPublicKey: ByteVector, bodyBytes: ByteVector, attachment: ByteVector, proofs: List[ByteVector])
# Поля
# | Название | Тип данных | Описание |
---|---|---|---|
1 | id | ByteVector | ID ордера |
2 | matcherPublicKey | ByteVector | Открытый ключ аккаунта матчера |
3 | assetPair | AssetPair | Пара токенов |
4 | orderType | Buy|Sell | Тип ордера — продажа или покупка |
5 | price | Int | Цена обмениваемого токена |
6 | amount | Int | Количество обмениваемых токенов |
7 | timestamp | Int | Unix-время валидации ордера матчером |
8 | expiration | Int | Unix-время, когда невыполненный ордер будет отменен |
9 | matcherFee | Int | Комиссия за исполнение ордера |
10 | matcherFeeAssetId | ByteVector|Unit | Токен комиссии за транзакцию. В настоящее время возможен только WAVES |
11 | sender | Address | Адрес отправителя ордера |
12 | senderPublicKey | ByteVector | Открытый ключ аккаунта отправителя ордера |
13 | bodyBytes | ByteVector | Массив байтов ордера |
14 | attachment | ByteVector] | Произвольные данные. Максимальный размер данных — 1024 байт |
15 | proofs | List[ByteVector] | Массив подтверждений |
# Пример
Приведенный ниже скрипт разрешает совершать с аккаунта покупку:
- только заданного ассета,
- только по заданной цене,
- только за WAVES.
{-# STDLIB_VERSION 8 #-}
{-# CONTENT_TYPE EXPRESSION #-}
{-# SCRIPT_TYPE ACCOUNT #-}
let myAssetId = base58'8LLpj6yQLUu37KUt3rVo1S69j2gWMbgbM6qqgt2ac1Vb'
match tx {
case o: Order =>
let isWavesPriceAsset = !isDefined(o.assetPair.priceAsset)
let rightPair = (o.assetPair.amountAsset == myAssetId) && isWavesPriceAsset
sigVerify(o.bodyBytes, o.proofs[0], o.senderPublicKey)
&& rightPair
&& o.price == 500000
&& o.orderType == Buy
case _ => false
}