| Доказательство | Что зафиксировать | Признак готовности |
|---|---|---|
| Актив | asset code и полный issuer | Пара совпадает в платеже и trustline |
| Линия | balance entry получателя или отправителя | Линия существует для той же пары |
| Доступ | authorization flags | Разрешён именно нужный тип операции |
| Ёмкость | limit, balance, buying liabilities | После платежа лимит не превышен |
| Результат | result code конкретной Payment operation | Операция успешна и ledger изменился |
- Доказательство
- Актив
- Что зафиксировать
- asset code и полный issuer
- Признак готовности
- Пара совпадает в платеже и trustline
- Доказательство
- Линия
- Что зафиксировать
- balance entry получателя или отправителя
- Признак готовности
- Линия существует для той же пары
- Доказательство
- Доступ
- Что зафиксировать
- authorization flags
- Признак готовности
- Разрешён именно нужный тип операции
- Доказательство
- Ёмкость
- Что зафиксировать
- limit, balance, buying liabilities
- Признак готовности
- После платежа лимит не превышен
- Доказательство
- Результат
- Что зафиксировать
- result code конкретной Payment operation
- Признак готовности
- Операция успешна и ledger изменился
Код актива без issuer не определяет trustline
Выпущенный актив Stellar задаётся парой asset code + issuer. Две линии с одинаковым кодом, но разными issuer — разные активы. Скопируйте оба поля из операции или исходной заявки и ищите balance entry только по этой паре. Нативный XLM не требует trustline; он тоже может вернуть PAYMENT_LINE_FULL из-за ёмкости аккаунта, но формула trustline ниже относится только к выпущенным активам.
Result code показывает, какая сторона не прошла проверку
| Код | Где проблема | Минимальное исправление |
|---|---|---|
| PAYMENT_NO_TRUST | У получателя нет trustline к code + issuer | Получатель создаёт линию для точного актива |
| PAYMENT_SRC_NO_TRUST | У отправителя нет нужной trustline | Создать исходную линию для точного актива либо исправить ошибочно выбранный asset |
| PAYMENT_NOT_AUTHORIZED | Получателю не разрешено держать актив | Эмитент меняет флаги линии, если перевод допустим |
| PAYMENT_SRC_NOT_AUTHORIZED | Отправителю не разрешено отправлять актив | Эмитент проверяет авторизацию исходной линии |
| PAYMENT_LINE_FULL | Получателю не хватает лимита с учётом buying liabilities | Освободить ёмкость либо повысить лимит |
- Код
- PAYMENT_NO_TRUST
- Где проблема
- У получателя нет trustline к code + issuer
- Минимальное исправление
- Получатель создаёт линию для точного актива
- Код
- PAYMENT_SRC_NO_TRUST
- Где проблема
- У отправителя нет нужной trustline
- Минимальное исправление
- Создать исходную линию для точного актива либо исправить ошибочно выбранный asset
- Код
- PAYMENT_NOT_AUTHORIZED
- Где проблема
- Получателю не разрешено держать актив
- Минимальное исправление
- Эмитент меняет флаги линии, если перевод допустим
- Код
- PAYMENT_SRC_NOT_AUTHORIZED
- Где проблема
- Отправителю не разрешено отправлять актив
- Минимальное исправление
- Эмитент проверяет авторизацию исходной линии
- Код
- PAYMENT_LINE_FULL
- Где проблема
- Получателю не хватает лимита с учётом buying liabilities
- Минимальное исправление
- Освободить ёмкость либо повысить лимит
Читайте код операции, а не только общий статус транзакции и текст кошелька. В одной транзакции может быть несколько операций: точная позиция неудачной Payment связывает ошибку с её source account, destination и asset.
Trustline может существовать, но не давать права на перевод
При включённом контроле доступа эмитент управляет флагами линии. Полная авторизация позволяет использовать актив в обычных операциях. Режим authorized to maintain liabilities ограниченнее: он позволяет сохранить или снять существующие обязательства, но не превращает линию в свободно принимающую новый платёж.
Получатель не может исправить NOT_AUTHORIZED новой попыткой Payment. Нужна операция эмитента над этой trustline. До неё не просите пользователя увеличивать лимит или пересоздавать ту же линию: эти действия не меняют флаг доступа.
LINE_FULL учитывает не только видимый balance
Для входящего Payment выпущенного актива проверьте условие: balance + buying liabilities + amount не превышает limit. Buying liabilities — объём актива, зарезервированный под возможное исполнение открытых offers. Поэтому линия может выглядеть незаполненной по одному balance и всё равно отклонить перевод.
Как освободить ёмкость без лишних изменений
- 1Сверьте значения
Прочитайте limit, balance и buying liabilities из одного актуального ledger snapshot.
- 2Найдите источник liabilities
Проверьте открытые offers получателя для этого актива. Не удаляйте их, пока владелец не подтвердил назначение.
- 3Выберите одно изменение
Увеличьте limit, уменьшите balance переводом по согласованному адресу либо отмените конкретное предложение.
- 4Пересчитайте запас
Убедитесь, что новый amount помещается после обновления ledger, и только затем формируйте новую Payment.
Успех доказывают код операции и новое состояние линии
| Наблюдение | Действие | Контроль результата |
|---|---|---|
| Линии нет | Владелец создаёт Change Trust для точного code + issuer, имея XLM на fee и reserve | Транзакция SUCCESS, trustline появилась в новом ledger |
| Линия есть, доступ закрыт | Запросить действие эмитента | Authorization flag изменился on-chain |
| Не хватает ёмкости | Изменить ровно limit, balance или нужные offers | Неравенство для amount выполняется |
| Payment уже успешна | Не отправлять дубль | У операции success и balance изменился на ожидаемую величину |
| Причина осталась неясной | Остановить повтор и сохранить envelope, tx hash, operation index | Ошибка воспроизводимо относится к той же операции |
- Наблюдение
- Линии нет
- Действие
- Владелец создаёт Change Trust для точного code + issuer, имея XLM на fee и reserve
- Контроль результата
- Транзакция SUCCESS, trustline появилась в новом ledger
- Наблюдение
- Линия есть, доступ закрыт
- Действие
- Запросить действие эмитента
- Контроль результата
- Authorization flag изменился on-chain
- Наблюдение
- Не хватает ёмкости
- Действие
- Изменить ровно limit, balance или нужные offers
- Контроль результата
- Неравенство для amount выполняется
- Наблюдение
- Payment уже успешна
- Действие
- Не отправлять дубль
- Контроль результата
- У операции success и balance изменился на ожидаемую величину
- Наблюдение
- Причина осталась неясной
- Действие
- Остановить повтор и сохранить envelope, tx hash, operation index
- Контроль результата
- Ошибка воспроизводимо относится к той же операции
Не переотправляйте старый envelope после исправления. Сначала проверьте исходный hash: при timeout ответ мог потеряться уже после приёма транзакции. Если прежняя попытка точно не прошла, загрузите актуальный sequence, соберите и подпишите новую транзакцию намеренно — иначе диагностическая попытка может стать дублем.
После новой отправки найдите транзакцию и конкретную Payment operation, проверьте successful, transaction_successful, code + issuer, from, to, amount и состояние линии в следующем ledger. Если в той же транзакции были другие операции с этим активом, учитывайте их отдельно и не приписывайте весь итоговый delta одной Payment. Общий порядок подтверждения перевода помогает не принять надпись интерфейса за доказательство, а разбор raw balance пригодится, если расходятся отображаемые знаки после запятой.
Fee bump отвечает за оплату комиссии и inner result, а sponsored reserves — за резервные обязательства аккаунта. Они могут встречаться рядом с Payment, но не заменяют проверку trustline и не являются исправлением этих трёх кодов.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Stellar Developers — Accounts Stellar Development Foundation · Проверено 30 августа 2026 г. в 16:16 GMT+5
- Stellar Developers — Assets Stellar Development Foundation · Проверено 30 августа 2026 г. в 16:16 GMT+5
- Stellar Developers — Control Asset Access Stellar Development Foundation · Проверено 30 августа 2026 г. в 16:16 GMT+5
- Stellar Horizon — Payment result codes Stellar Development Foundation · Проверено 30 августа 2026 г. в 16:16 GMT+5
- Stellar Developers — List of Operations Stellar Development Foundation · Проверено 30 августа 2026 г. в 16:16 GMT+5
