Большинство форм свапа делают поле refund address опциональным и прячут под адресом получателя. Именно это UX-решение даёт самую большую долю тикетов «где мои деньги» по всей индустрии агрегаторов. Когда депозит приходит поздно, уходит на чужую сеть или истекает фикс-лок — провайдеру нужно куда-то вернуть твою исходную монету. Без refund address деньги не пропадают, но возврат превращается в ручной процесс на 3–10 дней, за которые рынок обычно успеет сдвинуться не в твою пользу.
Этот гайд разбирает что такое refund address на самом деле, четыре сценария, которые его триггерят, как его выбрать под каждую крупную монету, и какие ошибки превращают возвращённый refund в безнадёжно застрявшие средства.
Что такое refund address — и чем он не является
Refund address — это обратный путь. Это адрес кошелька, куда swap-провайдер вернёт твой исходный депозит, если свап не сможет завершиться успешно. Он отделён от receiving address, на который приходит обменянная монета, если сделка успешна.
Два адреса, две разные сети, два разных сценария:
- Receiving address — destination-цепочка, destination-монета. Используется при успехе.
- Refund address — source-цепочка, source-монета. Используется при провале.
Если ты меняешь BTC на XMR — receiving address это Monero-адрес, refund address это Bitcoin-адрес. Поменять местами, повторно использовать или объединить их нельзя — они живут на разных блокчейнах, и refund на неправильную сеть теряется навсегда.
Refund address это также не эскроу, не контракт и не гарантия. Это просто адрес, на который провайдер обещает отправить средства, если их система триггерит возврат. Обещание операционное, не юридическое — non-custodial агрегаторы не держат средства, поэтому «refund» это upstream-провайдер инициирует on-chain транзакцию обратно к тебе.
Когда триггерится refund — четыре реальных сценария
Refund’ы не теоретические. У каждого свой конкретный триггер и статус-код.
1. Time expired. Ты выбрал fixed-rate, лок имеет окно в 30 минут, и депозит не подтвердился вовремя. Это самый частый триггер refund’а — окно подтверждения Bitcoin само по себе может превысить лок, если в mempool пробка. Провайдер делает авто-refund, потому что зафиксированный курс больше не валиден. Самый частый триггер — статус TIME_EXPIRED, мы разобрали причины здесь.
2. Сбой свапа. Ликвидность провайдера не закрыла сделку — outage, depeg, резкая волатильность, или destination-сеть была перегружена. Депозит подтвердился, но обмен не исполнился. Провайдер возвращает исходную монету.
3. Ниже минимума или выше максимума. У каждого провайдера есть min и max на свап. Если депозит ушёл ниже минимума (dust) или выше максимума — сделка не исполнится. Кто-то делает refund автоматически, кто-то требует ручного решения, а кто-то dust не возвращает вообще — network fee съест всю сумму.
4. Network mismatch. Ты отправил депозит на неправильную сеть (TRC-20 USDT на ERC-20 депозитный адрес, или BEP-20 туда же). Провайдер может это задетектить и предложить ручной refund — или не задетектить совсем, если формат адреса случайно проходит валидацию в обеих цепочках. Депозиты на чужую сеть — самая болезненная категория refund’ов, часто невосстановимая, и даже когда восстановима — требует прямого участия команды провайдера, ручной транзакции и иногда подписи с обеих сторон.
Опциональный в UI, обязательный на практике. Пропусти refund address — и обменяешь удобство сейчас на 3–10 дней восстановления потом.
Как выбрать хороший refund address
Хороший refund address это свежий, контролируемый, на правильной сети и self-custodial. Каждое слово важно.
Свежий. Используй новосгенерированный адрес, а не тот, что уже публиковал, постил или гонял недавно. На прозрачных цепочках вроде Bitcoin и Ethereum address reuse — это privacy anti-pattern, он связывает транзакции публично. Для Monero reuse не приватная проблема, но свежий subaddress на каждый свап делает учёт чище.
Контролируемый. Только self-custodial кошелёк. Hardware (Ledger, Trezor), десктоп с локальным запуском (Sparrow для BTC, MetaMask для ETH, Cake для XMR), или мобильные кошельки, где seed у тебя (Phantom для SOL, Trust Wallet для multi-chain). Seed phrase у тебя, не у кастодиана.
Та же сеть, что и депозит. Это non-negotiable. Refund платится в исходной монете на исходной сети. Депозит USDT-TRC20 = refund-адрес на Tron. USDT-ERC20 = Ethereum. Они выглядят по-разному (T... vs 0x...), не взаимозаменяемы, refund на неправильный формат не вернуть.
Не биржевой. Никогда не вставляй депозитный адрес централизованной биржи. Биржа кредитует депозиты по внутренней записи — ожидаемая сумма, ожидаемый источник, иногда memo. Refund от swap-провайдера этой метадаты не несёт, падает на их hot wallet неопознанным, и забрать его — многонедельный тикет, если он вообще возможен. Поддержка биржи обычно требует доказательство владения исходным кошельком, оригинальный order ID провайдера и иногда видео-верификацию — всё ради того, чтобы зачислить депозит, который их система не ожидала.
Пять самых частых ошибок
Это паттерны, которые превращают refund в безнадёжно застрявшие средства.
Ошибка 1: депозитный адрес биржи как refund. Refund на Binance, Coinbase, Kraken или любую другую централизованную биржу падает в их hot wallet без метадаты, по которой биржа кредитует твой счёт. Технически возвращён, технически твой, практически — недостижим без многонедельной битвы с поддержкой.
Депозитный адрес биржи в качестве refund-адреса — это самый быстрый способ потерять средства, которые тебе технически вернули.
Ошибка 2: refund на чужую сеть. Вставил ERC-20 USDT-адрес, а депозит был USDT на Tron. Формат может пройти валидацию у провайдера, может не пройти — современные провайдеры обычно чекают, но не все, и даже когда чекают — refund платится на ту сеть, на которой пришёл депозит. Чужая сеть = безнадёжно.
Ошибка 3: повторное использование адреса. Один refund-адрес на много свапов — это публикация твоей swap-активности на прозрачной цепочке. Для privacy-сценариев (особенно всё, что касается Monero) это убивает половину смысла. Генери свежий адрес на каждый свап — современные кошельки делают это в один клик.
Ошибка 4: оставить поле пустым. Форма пускает дальше без refund-адреса. Большинство провайдеров примут депозит без него и пометят отсутствие поля только в момент refund’а — а ты уже сидишь в ручном support flow. Считай поле обязательным даже когда форма этого не требует.
Ошибка 5: вставить receive-адрес в поле refund. Они на разных цепочках. Monero-адрес в поле BTC refund обычно не пройдёт валидацию и отвалится — но если ты гонял стейблкоин между сетями с похожими форматами адресов, ошибка с чужой сетью пройдёт валидацию тихо.
Что будет, если пропустить refund address
Свап не откажется стартовать — большинство провайдеров идут дальше без него. Проблема всплывает только когда refund реально триггерится.
В этот момент автоматика провайдера не знает куда отправить средства, и транзакция останавливается. Твой депозит висит на кошельке провайдера со статусом «не решено». Тебе нужно:
- Открыть тикет в поддержку провайдера (не агрегатора — агрегатор средств не держит).
- Доказать что депозит твой: дать transaction hash, исходный swap или order ID, депозитный адрес, время.
- Указать refund-адрес постфактум — те же правила (контролируемый, правильная сеть, не биржа).
- Ждать пока support руками пушнёт refund. Реальный срок: 3–10 рабочих дней, иногда дольше в выходные или при наплыве.
Пока деньги вернутся, рынок обычно сдвинется не в твою пользу. Смысл свапа был зафиксировать курс или переложиться между активами — а ты неделю сидишь на исходной монете, пока цены ходят.
Best practice по монетам
Правила выше работают универсально, но у каждой цепочки свои нюансы.
BTC. Используй native SegWit (bc1...) — меньше fee на refund. Lightning Network — ловушка: если депозит был через Lightning, refund может вернуться on-chain BTC, не Lightning-платежом. Указывай on-chain BTC refund-адрес даже при депозите через LN. Полный флоу BTC → XMR с обработкой refund-адреса — в этом гайде.
ETH и ERC-20 токены. Один и тот же Ethereum-адрес работает для ETH и всех ERC-20 токенов, но refund возвращается в том токене, что был депозит. Gas fees на refund вычитаются из суммы возврата — может быть ощутимо при дорогом gas. Не используй smart-contract адрес как refund destination — некоторые провайдеры не могут отправить в контракт без явного gas limit.
USDT. Здесь происходит большинство network-mismatch refund’ов. USDT существует на Tron (TRC-20), Ethereum (ERC-20), Solana (SPL), BNB Chain и других. Сеть депозита определяет сеть refund’а — точка. Депозит TRC-20 → refund-адрес TRC-20 (T...). ERC-20 → ERC-20 (0x...). Solana → SPL (base58). Чужая сеть — безнадёжно.
XMR. Monero refund работает как обычно, но используй свежий subaddress, не main. Refund на биржу особенно разрушителен в Monero — он re-link’ует средства с твоей личностью на бирже и аннулирует privacy-выигрыш, ради которого ты вообще делал свап. Monero GUI, Cake или Feather — сгенерируй новый subaddress на каждый свап.
SOL. Быстро и дёшево. Rent exemption — проблема только на совсем dust-суммах (sub-cent SOL). Receive-адреса Phantom и Solflare нормально работают как refund destination. Если refund в SPL-токене (USDC, USDT-SPL), убедись что у адреса уже есть associated token account для этого токена — без него refund может зависнуть до создания аккаунта вручную.
Lightning Network. Edge case стоит отдельной заметки: не все провайдеры умеют делать refund Lightning-депозита через Lightning. Если не умеют — refund возвращается on-chain BTC. Всегда указывай on-chain BTC refund-адрес даже при депозите через Lightning — лучше иметь и не понадобится, чем словить упавший LN-депозит и узнать, что нужен chain-адрес, который ты не указал.
Как SwapZilla обрабатывает refund-адреса
SwapZilla — non-custodial агрегатор, мы средства не держим. Когда ты подтверждаешь свап, депозит идёт напрямую на upstream-провайдера, чью котировку ты выбрал, и любой refund инициируется тем же провайдером на его инфраструктуре.
Refund-адрес, который ты указал, передаётся напрямую провайдеру в payload’е ордера. Дальше его автоматика владеет refund-флоу — если ордер перешёл в TIME_EXPIRED (депозит не подтвердился вовремя) или другой failure-статус, система провайдера использует этот адрес.
Терминальный статус ордера будет REFUNDED, как только refund-транзакция упадёт on-chain. Этот статус финальный — свап не ретраится, новой котировки не будет, средства теперь на refund-адресе, который ты указал. Можешь запустить свап и пересмотреть этот гайд перед сабмитом; остальные вопросы по флоу разобраны в FAQ.
Одно предложение, которое стоит запомнить: укажи refund address сейчас — поблагодаришь себя потом.