Почему это важнее, чем кажется
Представьте отправку, которая завершилась таймаутом. Дошла ли она до блокчейна? Неизвестно. Без клиентского идентификатора остаётся либо запросить недавние ордера и угадывать по рынку, стороне, цене и количеству, либо ничего не делать и надеяться. С идентификатором неопределённость исчезает. Вы отменяете по значению, которое сгенерировали сами. Если ордер существовал, он отменён. Если он не дошёл, отмене нечего отменять. В обоих случаях вы оказываетесь в известном состоянии — а именно это и нужно системе, работающей без человека за экраном. По той же причине становится посильной сверка. В ваших собственных записях ключом служит идентификатор, который назначили вы, поэтому сопоставить вашу картину с блокчейном — это поиск по ключу, а не эвристика.Формат
Идентификатор — это 16-байтовое значение, передаваемое как шестнадцатеричная строка из 32 символов в нижнем регистре с префиксом0x.
- Только нижний регистр. Верхний регистр отклоняется, а не нормализуется.
- Точная длина. Более короткие и более длинные значения отклоняются.
- Значение из одних нулей зарезервировано.
0x00000000...0000— это маркер со значением отсутствует, использовать его как идентификатор нельзя.
Уникальность
Уникальность действует в пределах субсчёта: сочетания подписывающего адреса и субсчёта под ним. Отсюда два следствия. Разные субсчета одного адреса могут использовать один и тот же идентификатор без конфликта — это удобно, когда независимые стратегии генерируют идентификаторы каждая сама по себе. А внутри одного субсчёта повторное использование идентификатора, занятого активным ордером, — ошибка, а не замена.Генерируйте идентификаторы случайно, а не последовательно. Счётчик соблазнителен тем, что делает порядок наглядным, но если при перезапуске счётчик потеряется, пойдут коллизии с ещё активными ордерами, а 16 случайных байтов на практике не сталкиваются никогда.
Что с ним можно делать
Срок жизни
Идентификатор принадлежит ордеру, а не вашей сессии. Он остаётся доступен для запроса после исполнения или отмены ордера — именно это и делает его полезным для сверки постфактум. Повторно использовать его можно, как только помеченный им ордер перестаёт быть активным. На практике смысла в этом мало: новое случайное значение ничего не стоит и снимает любой вопрос о том, к какому ордеру относится историческая запись.Что дальше
Изменение ордеров
Как изменить активный ордер и что происходит с его идентификаторами.
Типы ордеров
К чему можно прикрепить идентификатор.
Разработчикам
Отправка ордеров и обработка неоднозначных ответов в коде.
Упорядочивание транзакций
Почему отмена, отправленная в том же блоке, выполняется раньше агрессивного ордера.