
op_no_destination значит, что вы пытались заплатить на адрес Stellar, который в сети никогда не создавался. В Stellar адрес появляется только после того, как кто-то пополнит его операцией Create Account с суммой не ниже минимального баланса — сейчас это 1 XLM. Обычная операция Payment создать аккаунт не может, поэтому сеть отклоняет платёж. Средства остаются у вас; комиссия в доли цента всё равно списывается, потому что транзакция попала в леджер. Решение — отправить XLM через Create Account (большинство кошельков делают это сами при отправке XLM) или попросить получателя сначала активировать адрес.
Почему аккаунты Stellar нужно создавать
Как и XRP Ledger, Stellar хранит каждый аккаунт как запись в леджере и требует, чтобы запись была обеспечена резервом в нативной монете. Правило простое: минимальный баланс = (2 + число подзаписей) × базовый резерв, а базовый резерв равен 0,5 XLM. Новому аккаунту без вложений нужен 1 XLM. Каждая линия доверия, открытый ордер, дополнительный подписант или запись данных добавляют подзапись и ещё 0,5 XLM. Калькулятор минимального баланса Stellar посчитает это для вашего аккаунта.
Ключ, созданный в кошельке, — это просто пара ключей; пока через Create Account не придёт 1 XLM, обозреватели показывают адрес как ненайденный. Поэтому некоторые кошельки при первом запуске пишут «Активируйте аккаунт» или «Пополните на 1 XLM».
Порядок, который работает
Для самого XLM путь короткий. Большинство кошельков — Lobstr, Freighter, Solar и другие — видят, что получателя нет, и сами переключают платёж на Create Account, если сумма не меньше 1 XLM. Если вы пишете скрипт на SDK, проверьте, загружается ли аккаунт получателя; если нет, используйте createAccount со стартовым балансом от 1 XLM вместо payment.
Для токена вроде USDC в Stellar условий два: аккаунт получателя должен существовать и иметь линию доверия к эмитенту актива. Без линии доверия платёж падает с op_no_trust. Получатель добавляет линию доверия в кошельке (минимальный баланс растёт на 0,5 XLM), затем вы отправляете токен.
Другие коды того же семейства
| Код | Значение | Что делать |
|---|---|---|
| op_no_destination | Аккаунта получателя не существует | Create Account с ≥ 1 XLM |
| op_low_reserve | Create Account со стартовым балансом ниже минимума | Отправить не меньше 1 XLM |
| op_no_trust | У получателя нет линии доверия к активу | Получатель добавляет линию |
| op_not_authorized | Эмитент требует авторизации линии | Получатель проходит авторизацию эмитента |
| op_underfunded | У отправителя нет суммы сверх своего минимума | Отправить меньше или пополнить |
| tx_insufficient_fee | Ставка комиссии ниже текущей (уровень транзакции) | Отправить с большей комиссией |
Комиссии в Stellar маленькие и считаются в струпах (1 XLM = 10 000 000 stroops). Базовая комиссия — 100 струпов за операцию, 0,00001 XLM. При всплеске нагрузки ставка должна перебить другие транзакции за место в леджере; кошельки делают это автоматически.
Memo и адреса бирж
Биржи обычно принимают XLM на один общий адрес и узнают вас по memo. Забудете memo — платёж придёт, но не будет зачислен. В Stellar для этого есть соглашение SEP-29: аккаунт может опубликовать флаг config.memo_required, и совместимые кошельки откажутся отправлять на него без memo. Проверяют это не все кошельки, поэтому всегда копируйте memo вместе с адресом. Проверка memo и тега показывает, каким монетам и сетям он нужен, а статья про memo — как вернуть платёж, если вы его забыли.
Как проверить неудачную транзакцию
- Вставьте хеш транзакции в обозреватель Stellar, например StellarExpert. Хеши Stellar — 64 шестнадцатеричных символа; определитель хеша подскажет, где искать.
- Прочитайте результат: у неудачной транзакции tx_failed и код операции, например op_no_destination.
- Откройте адрес получателя. «Account not found» подтверждает, что он не создавался.
- Отправьте правильно: Create Account для XLM или дождитесь линии доверия получателя для токена.
Как потом вернуть резерв
1 XLM не тратится — он лежит на аккаунте как неприкосновенный минимум. Удаление линий доверия с нулевым балансом и отмена ордеров освобождают по 0,5 XLM. Базовый минимум возвращается слиянием аккаунта с другим через Account Merge: операция переводит весь остаток получателю и удаляет аккаунт из леджера.
Одна оговорка про слияние: получатель Account Merge должен уже существовать, а если это адрес биржи, слияние зачислят, только если биржа его поддерживает и вы указали memo. Если не уверены, сначала слейте аккаунт в свой существующий.
Частые вопросы
Сколько XLM нужно новому аккаунту Stellar?
Минимум 1 XLM: два базовых резерва по 0,5 XLM. Каждая линия доверия или ордер добавляет 0,5 XLM.
Я потерял XLM после op_no_destination?
Нет. Платёж не выполнился. Списана только комиссия — 100 струпов за операцию.
Почему нельзя отправить USDC в Stellar на новый адрес?
Получатель должен существовать и добавить линию доверия к эмитенту USDC до получения.
Что такое SEP-29?
Соглашение Stellar, по которому аккаунт может пометить себя как требующий memo, и совместимые кошельки не дадут отправить без него.
Можно вернуть 1 XLM?
Да, слив аккаунт в другой через Account Merge: всё отправится получателю, а аккаунт закроется.