Идемпотентность
Запрос может оборваться по таймауту уже после того, как сервис его принял. Чтобы повторить его и не создать второй
sweep, давайте каждому заданию external_id — свой идентификатор, например id депозита в вашей системе.
{ "external_id": "dep-7f3a91", "chain_id": 11155111, "hot_wallet": "0x…", "account": "0x…", "token": "USDT" }- Первый запрос с
external_idсоздаёт задание и отвечает202 Accepted. - Любой следующий запрос с тем же
external_idничего не создаёт и отвечает200 OKс заданием, созданным в первый раз, — в каком бы статусе оно ни было. SDK возвращают его сcreated: false. external_id— до 128 символов, уникален среди всех ваших заданий на sweep. У снятий делегации своиexternal_id, отдельные от заданий.
Запрос проверяется до того, как ищется external_id: повтор с неверным телом получит свою ошибку, а не исходное
задание.
Без external_id
Заголовок раздела «Без external_id»Каждый запрос создаёт новое задание. Повтор после таймаута может поставить один и тот же sweep в очередь дважды. Без
amount второе задание обычно ничего не найдёт и будет отклонено; с amount оно может перевести больше, чем вы
хотели, если на адрес тем временем пришли новые средства. Всегда задавайте external_id.
Как повторять безопасно
Заголовок раздела «Как повторять безопасно»- Сетевые ошибки, таймауты и
5xx: повторяйте с тем жеexternal_idи растущей паузой. 4xx: не повторяйте тот же запрос — исправьте то, о чём говорит ошибка. См. Ошибки и повторы.- Задание закончилось
rejectedилиfailed: это окончательно. Чтобы попробовать снова — например, с новой авторизацией, — отправьте новый запрос с новымexternal_id.
Идемпотентны сами по себе
Заголовок раздела «Идемпотентны сами по себе»| Запрос | Что будет при повторе |
|---|---|
POST /v1/hot-wallets | Вернёт тот же горячий кошелёк (котёл) для той же сети и адреса. После failed перезапустит развёртывание. |
PUT /v1/webhook | Задаст те же настройки ещё раз; секрет не меняется. |
PATCH /v1/settings | Задаст те же значения ещё раз. |
DELETE /v1/webhook | Ответит 404 not_found и ничего не изменит. |
GET-запросы | Ничего не меняют. |
POST /v1/webhook/test не идемпотентен: каждый вызов ставит в очередь ещё одно тестовое событие.