Первый и повторный sweep
Первый и повторный
Заголовок раздела «Первый и повторный»Первый sweep депозитного адреса везёт его подписанную авторизацию: одна и та же транзакция ставит делегат на адрес
и сметает его. После этого повторным sweep авторизация не нужна. Поле kind у выполненного задания говорит, каким
он был:
kind | Что было нужно депозитному адресу | Эталон классики |
|---|---|---|
repeat | ничего: делегат уже стоял | пополнение и перевод с адреса, у которого есть аккаунт (existing) |
first | делегат, поставленный в этом батче; аккаунт в сети у адреса уже был — с него уходили транзакции или на нём есть нативная монета | то же (existing) |
first_new | делегат, поставленный в этом батче, который заодно создал аккаунт: на адресе были только токены | пополнение, которое создаёт аккаунт, и перевод (new) |
Следить, какие адреса уже делегированы, не нужно: авторизацию можно присылать в каждом запросе. Сервис использует её, только когда она нужна адресу, и игнорирует в остальных случаях.
Почему экономия — на повторных sweep
Заголовок раздела «Почему экономия — на повторных sweep»По правилам газа Glamsterdam (EIP-8037), которые уже действуют в Sepolia и ожидаются в мейннете Ethereum, первое касание адреса, где лежат только токены, создаёт ему аккаунт за 183 600 газа — в любой схеме: в классике его создаёт пополнение газом, здесь — делегирование. Батчи окупаются на повторных sweep:
| USDT, газ на адрес в Sepolia | Классика: пополнение + перевод | Батч из 10 | Батч из 50 |
|---|---|---|---|
первый sweep (first_new) | 237 233 | 246 398 | 243 687 |
| повторный sweep | 53 633 | 20 246 | 18 078 |
Поэтому сервис выгоднее всего для постоянных депозитных адресов, которые пользователи пополняют снова и снова. Для
одноразовых адресов (новый адрес на каждый счёт) экономии по газу нет, но остаются операционные плюсы: не нужно
пополнять адреса газом, нет пыли, одна транзакция на батч. По прежним правилам газа (мейннет Ethereum сейчас, BSC)
эталоны new и existing совпадают.
Nonce и устаревшие авторизации
Заголовок раздела «Nonce и устаревшие авторизации»Авторизация подписывается для текущего nonce депозитного адреса: 0 у адреса, который ни разу не отправлял
транзакций. Если адрес отправит любую транзакцию до того, как его первый sweep уйдёт в сеть, nonce сдвинется и
авторизация перестанет действовать. Задание тогда получит rejected с причиной stale_authorization: подпишите новую
с текущим nonce и отправьте sweep снова.
Сколько сметать
Заголовок раздела «Сколько сметать»amount в POST /v1/sweeps необязателен:
- без
amountsweep переводит весь баланс токена, который есть на адресе в момент выполнения батча; - с
amount— ровно эту сумму в минимальных единицах токена (1 = 0,000001 USDT в Ethereum), вплоть до одной единицы.
Перед отправкой сервис симулирует батч. Задание, которое упало бы в симуляции, — например, адреса без баланса или с
балансом меньше amount, — получает rejected с причиной would_fail.
Оставлять одну единицу на адресе
Заголовок раздела «Оставлять одну единицу на адресе»Баланс токена хранится не в самом адресе, а в контракте токена — строкой «адрес → сумма». Когда баланс становится нулём, строка удаляется, и следующий депозит пользователя создаёт её заново. После EIP-8037 это одна из самых дорогих операций — 97 920 газа, — и платит её пользователь, который присылает токены.
| Сметать весь баланс | Оставлять 1 единицу | |
|---|---|---|
| Следующий депозит пользователя на адрес (газ пользователя) | ~126 000 | ~28 000 |
| Повторный sweep в батче из 10 (ваш газ) | ~20 000 | ~24 500 |
Оставленная единица обходится вам примерно в 4 000 газа на sweep (сеть больше не возвращает газ за удалённую строку), а каждый следующий депозит ваших пользователей становится примерно в 4,5 раза дешевле. Сама единица — 0,000001 USDT на адрес.
- Для всех sweep:
PATCH /v1/settingsс{"keep_one_unit": true}. По умолчанию выключено. - Для одного sweep:
keep_one_unitвPOST /v1/sweeps— перекрывает настройку в обе стороны.
С флагом sweep переводит не больше «баланс минус одна единица»: без amount — всё, кроме одной единицы; с amount —
эту сумму, но не больше баланса минус одна. Баланс сервис читает при подготовке батча, а деньги, пришедшие позже,
дождутся следующего sweep. Если сверх одной единицы на адресе ничего нет, задание получает rejected с причиной
nothing_to_sweep. На нативную монету флаг не действует: её sweep всегда переводит запрошенное.
Сервис собирает задания одного горячего кошелька (котла), которые стоят в очереди, в один батч — до размера батча сети: 50 в Sepolia и 200 в BSC testnet. Батч, который не помещается в лимит газа одной транзакции, уходит частями, и задания при этом не теряют попыток.
Накладные расходы батча делятся между его адресами, поэтому крупные батчи дешевле в пересчёте на адрес, а батч из одного адреса почти ничего не экономит. Присылайте задания пачками — например, раз в несколько минут всё, что пришло, — а не по одному с паузами.