# Бинарный формат ордера
Подробнее об ордере читайте на странице Ордер.
В транзакции обмена версии 3 могут использоваться версии 4, 3, 2 и 1 ордера.
В транзакции обмена версии 2 могут использоваться версии 3, 2 и 1 ордера.
В транзакции обмена версии 1 может использоваться только версия 1 ордера.
# Версия 4
Бинарный формат ордера версии 4 соответствует protobuf-схеме order.proto. См. Protocol Buffers Developer Guide.
Версия 4 появилась с момента активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions”.
message AssetPair {
bytes amount_asset_id = 1;
bytes price_asset_id = 2;
};
message Order {
enum Side {
BUY = 0;
SELL = 1;
};
enum PriceMode {
DEFAULT = 0;
FIXED_DECIMALS = 1;
ASSET_DECIMALS = 2;
};
int32 chain_id = 1;
bytes matcher_public_key = 3;
AssetPair asset_pair = 4;
Side order_side = 5;
int64 amount = 6;
int64 price = 7;
int64 timestamp = 8;
int64 expiration = 9;
Amount matcher_fee = 10;
int32 version = 11;
repeated bytes proofs = 12;
PriceMode price_mode = 14;
bytes attachment = 15;
oneof sender {
bytes sender_public_key = 2;
bytes eip712_signature = 13;
}
};
message Amount {
bytes asset_id = 1;
int64 amount = 2;
};
Поле | Размер | Описание |
---|---|---|
chain_id | 1 байт | Байт сети |
matcher_public_key | 32 байта | Открытый ключ матчера |
asset_pair.amount_asset_id | • 32 байта для ассета • 0 для WAVES | ID amount-ассета |
asset_pair.price_asset_id | • 32 байта для ассета • 0 для WAVES | ID price-ассета |
order_side | 1 байт | Тип ордера: покупка или продажа |
amount | 8 байт | Количество amount-ассета в минимальных единицах («копейках») |
price | 8 байт | Стоимость 1 amount-ассета, выраженная в price-ассете, умноженная на • 108 для ордера версии 4 с атрибутом priceMode = DEFAULT или priceMode = FIXED_DECIMALS ;• 10 8 + priceAssetDecimals – amountAssetDecimals для ордера версии 4 с атрибутом priceMode = ASSET_DECIMALS , где amountAssetDecimals и priceAssetDecimals — количество знаков после запятой у amount- и price-ассета соответственно (параметр токена) |
timestamp | 8 байт | Временная метка ордера: Unix-время в миллисекундах |
expiration | 8 байт | Окончание срока действия ордера: Unix-время в миллисекундах |
matcher_fee.asset_id | • 32 байта для ассета • 0 для WAVES | ID токена, в котором выражена комиссия матчера |
matcher_fee.amount | 8 байт | Комиссия матчера |
version | 1 байт | Версия ордера: 4 |
proofs | Размер каждого подтверждения — до 64 байт, до 8 подтверждений | Подтверждения ордера, используемые для проверки валидности |
price_mode | 1 байт | Способ расчета значения в поле price . Поле доступно с момента активации фичи № 17 “Ride V6, MetaMask support” |
sender | • 32 байта для ордера с подписью Waves • 65 байт для ордера с подписью пользователя MetaMask | • Для ордера с подписью Waves: открытый ключ отправителя ордера • Для ордера с подписью пользователя MetaMask: подпись ECDSA отправителя ордера. Поддержка MetaMask доступна c момента активации фичи № 17 “Ride V6, MetaMask support”. Подробнее в разделе Подписание транзакций и ордеров в MetaMask |
attachment | 1024 байт | Произвольные данные. Поле доступно с момента активации фичи № 22 “Light Node” |
# Версия 3
Порядковый номер поля | Название поля | Название JSON-поля | Тип поля | Размер поля в байтах | Значение |
---|---|---|---|---|---|
1 | Номер версии бинарного формата ордера | version | Byte | 1 | Значение должно быть равно 3 |
2 | Открытый ключ отправителя ордера | senderPublicKey | Array[Byte] | 32 | |
3 | Открытый ключ матчера | matcherPublicKey | Array[Byte] | 32 | |
4.1 | Флаг токена Б (amount asset) | Byte | 1 | Если токен WAVES, то значение 0, иначе — 1 | |
4.2 | ID токена Б (amount asset) | amountAsset | Array[Byte] | S | Если токен не WAVES, то S = 32, иначе — поле не должно присутствовать в бинарном формате |
5.1 | Флаг токена А (price asset) | Byte | 1 | Если токен WAVES, то значение 0, иначе — 1 | |
5.2 | ID токена А (price asset) | priceAsset | Array[Byte] | S | Если токен не WAVES, то S = 32, иначе — поле не должно присутствовать в бинарном формате |
6 | Тип ордера | orderType | Byte | 1 | Если ордер на покупку, то значение 0, если на продажу — 1 |
7 | Количество токена Б (amount asset), которое отправитель ордера предлагает за один токен А | price | Long | 8 | байты в формате big-endian |
8 | Количество токена А (price asset), которое отправитель ордера хочет купить или продать в зависимости от типа ордера | amount | Long | 8 | байты в формате big-endian |
9 | Количество миллисекунд с начала эпохи Unix до момента валидации ордера матчером | timestamp | Long | 8 | байты в формате big-endian |
10 | Количество миллисекунд с начала эпохи Unix до момента отмены невыполненного ордера | expiration | Long | 8 | байты в формате big-endian |
11 | Комиссия матчера | matcherFee | Long | 8 | байты в формате big-endian |
12 | Флаг токена комиссии матчера | Byte | 1 | Если токен WAVES, то значение 0, иначе — 1 | |
13 | Токен комиссии матчера | matcherFeeAssetId | Array[Byte] | F | Если токен комиссии не WAVES, то F = 32, иначе — поле не должно присутствовать в бинарном формате |
14 | Подтверждения | proofs | Array[Подтверждение] | S | Если массив пустой, то S = 3.Если массив не пустой, то S = 3 + 2 × N + (P 1 + P 2 + ... + P n),где N — количество подтверждений в массиве,P n — размер N-го подтверждения в байтах.Максимальное количество подтверждений в массиве — 8. Максимальный размер каждого подтверждения — 64 байта |
# JSON-представление ордера версии 3
{
"version": 3,
"senderPublicKey": "FMc1iASTGwTC1tDwiKtrVHtdMkrVJ1S3rEBQifEdHnT2",
"matcherPublicKey": "7kPFrHDiGw1rCm7LPszuECwWYL3dMf6iMifLRDJQZMzy",
"assetPair": {
"amountAsset": "BrjUWjndUanm5VsJkbUip8VRYy6LWJePtxya3FNv4TQa",
"priceAsset": null
},
"orderType": "buy",
"amount": 150000000,
"timestamp": 1548660872383,
"expiration": 1551252872383,
"matcherFee": 300000,
"proofs": [
"YNPdPqEUGRW42bFyGqJ8VLHHBYnpukna3NSin26ERZargGEboAhjygenY67gKNgvP5nm5ZV8VGZW3bNtejSKGEa"
],
"id": "Ho6Y16AKDrySs5VTa983kjg3yCx32iDzDHpDJ5iabXka",
"sender": "3PEFvFmyyZC1n4sfNWq6iwAVhzUT87RTFcA",
"price": 1799925005,
}
# Ордер версии 2
Порядковый номер поля | Название поля | Тип поля | Размер поля в байтах | Описание поля |
---|---|---|---|---|
1 | Номер версии бинарного формата ордера | Byte | 1 | Значение должно быть равно 2 |
2 | Открытый ключ отправителя ордера | Array[Byte] | 32 | |
3 | Открытый ключ матчера | Array[Byte] | 32 | |
4.1 | Флаг токена А | Byte | 1 | Если токен WAVES, то значение 0, иначе — 1 |
4.2 | ID токена А | Array[Byte] | S | Если токен не WAVES, то S = 32, иначе — поле не должно присутствовать в бинарном формате |
5.1 | Флаг токена Б | Byte | 1 | Если токен WAVES, то значение 0, иначе — 1 |
5.2 | ID токена Б | Array[Byte] | S | Если токен не WAVES, то S = 32, иначе — поле не должно присутствовать в бинарном формате |
6 | Тип ордера | Byte | 1 | Если ордер на покупку, то значение 0, если на продажу — 1 |
7 | Количество токена А | Long | 8 | Количество токена А, которое отправитель ордера предлагает за один токен Б |
8 | Количество токена Б | Long | 8 | Количество токена Б, которое отправитель ордера хочет купить |
9 | Количество миллисекунд с начала эпохи Unix до момента валидации ордера матчером | Long | 8 | |
10 | Количество миллисекунд с начала эпохи Unix до момента отмены невыполненного ордера | Long | 8 | Максимальное значение: время отправки ордера + 30 дней |
11 | Комиссия матчера | Long | 8 | |
12 | Подтверждения | Array[Подтверждение] | S | Если массив пустой, то S = 3.Если массив не пустой, то S = 3 + 2 × N + (P 1 + P 2 + ... + P n),где N — количество подтверждений в массиве,P n — размер N-го подтверждения в байтах.Максимальное количество подтверждений в массиве — 8. Максимальный размер каждого подтверждения — 64 байта |
# Ордер версии 1
Порядковый номер поля | Название поля | Тип поля | Размер поля в байтах | Описание поля |
---|---|---|---|---|
1 | Открытый ключ отправителя ордера | Array[Byte] | 32 | |
2 | Открытый ключ матчера | Array[Byte] | 32 | |
3.1 | Флаг токена A | Byte | 1 | Если WAVES, то значение 0, иначе — 1 |
3.2 | ID токена А | Array[Byte] | S | Если токен не WAVES, то S = 32, иначе — поле не должно присутствовать в бинарном формате |
4.1 | Флаг токена Б | Byte | 1 | Если WAVES, то значение 0, иначе — 1 |
4.2 | ID токена Б | Array[Byte] | S | Если токен не WAVES, то S = 32, иначе — поле не должно присутствовать в бинарном формате |
5 | Тип ордера | Byte | 1 | Если ордер на покупку, то значение 0, если на продажу — 1 |
6 | Количество токена А, которое отправитель ордера предлагает за единицу токена Б | Long | 8 | |
7 | Количество токена Б, которое отправитель ордера хочет купить | Long | 8 | |
8 | Количество миллисекунд с начала эпохи Unix до момента валидации ордера матчером | Long | 8 | |
9 | Количество миллисекунд с начала эпохи Unix до момента отмены невыполненного ордера | Long | 8 | |
10 | Комиссия матчера | Long | 8 | |
11 | Подпись отправителя ордера | Array[Byte] | 64 |