Сначала восстановите точный пакет транзакций
Соберите исходные подписанные транзакции или их сохранённые байты — сериализованное представление, которое получила сеть. Для каждой запишите индекс в пакете, txID, тип, отправителя, допустимые раунды, комиссию и поле `Group`. Одной строки из кошелька мало: сеть оценивает полный упорядоченный набор. Перед передачей подписей ещё раз сверьте, что именно подписывает кошелёк.
Удалите `Group` из копий неподписанных транзакций, вычислите ID для того же порядка и сравните его с каждым исходным полем. Перестановка двух элементов, изменение комиссии, раунда, поля `Note` с заметкой или любого другого подписанного поля создаёт новый набор. Старые подписи к пересобранной группе не подходят.
После смены ключа используйте способ подписи, указанный в текущем состоянии аккаунта. Гайд про `auth-addr` помогает отделить ошибку подписанта от несовпавшего Group ID.
Два отказа выглядят похоже, но чинятся по-разному
| Наблюдение | Что оно доказывает | Следующая проверка |
|---|---|---|
| У элементов разные `Group` или пересчитанный ID не совпал | Пакет изменён либо собран в другом порядке | Вернуться к одной неподписанной версии, назначить ID заново и собрать новые подписи |
| `confirmed-round` равен нулю, `pool-error` заполнен | Этот узел удалил транзакцию из недавнего пула с указанной причиной | Сверить тот же пакет на другом синхронизированном узле и классифицировать текст ошибки |
| Симуляция вернула `failed-at` | На снимке состояния выбранного раунда найден путь к ошибке | Связать первый индекс с элементом группы; следующие индексы ведут к вложенной транзакции |
| Симуляция прошла, а отправка нет | Состояние, подписи или настройки проверки различались | Сверить `last-round`, настройки симуляции (`overrides`), подписи, сеть и ответ отправки |
| Indexer нашёл группу | Группа уже вошла в подтверждённую историю | Не пересылать её; проверить изменения нужных аккаунтов, активов и приложений |
- Наблюдение
- У элементов разные `Group` или пересчитанный ID не совпал
- Что оно доказывает
- Пакет изменён либо собран в другом порядке
- Следующая проверка
- Вернуться к одной неподписанной версии, назначить ID заново и собрать новые подписи
- Наблюдение
- `confirmed-round` равен нулю, `pool-error` заполнен
- Что оно доказывает
- Этот узел удалил транзакцию из недавнего пула с указанной причиной
- Следующая проверка
- Сверить тот же пакет на другом синхронизированном узле и классифицировать текст ошибки
- Наблюдение
- Симуляция вернула `failed-at`
- Что оно доказывает
- На снимке состояния выбранного раунда найден путь к ошибке
- Следующая проверка
- Связать первый индекс с элементом группы; следующие индексы ведут к вложенной транзакции
- Наблюдение
- Симуляция прошла, а отправка нет
- Что оно доказывает
- Состояние, подписи или настройки проверки различались
- Следующая проверка
- Сверить `last-round`, настройки симуляции (`overrides`), подписи, сеть и ответ отправки
- Наблюдение
- Indexer нашёл группу
- Что оно доказывает
- Группа уже вошла в подтверждённую историю
- Следующая проверка
- Не пересылать её; проверить изменения нужных аккаунтов, активов и приложений
Ответ `pending/{txid}` привязан к памяти конкретного algod. Ноль в `confirmed-round` и пустой `pool-error` означает только, что узел пока держит транзакцию; старую запись он может уже не помнить. Когда два RPC расходятся, сравните их текущие раунды и роль источника, а не выбирайте самый удобный ответ.
`failed-at` указывает путь, а не готовое объяснение
Запустите симуляцию точной группы и сохраните `last-round`, `failed-at`, `failure-message` и все настройки из `overrides`. Первый индекс `failed-at` — позиция транзакции верхнего уровня, причём счёт начинается с нуля. Если путь длиннее, следующие числа ведут к вложенной транзакции (inner transaction). Сопоставляйте ошибку с объектом по индексу, а не по имени кнопки или адресу получателя.
Что не переносится из симуляции автоматически
- симуляция на свежем состоянии не воспроизводит старый отказ, если изменились баланс, ячейка хранения (`box`), остаток актива или параметры приложения;
- `allow-empty-signatures` разрешает пустые подписи, `fix-signers` подставляет подписантов, а дополнительный лимит вычислений и доступ к неуказанным ресурсам меняют условия проверки; эти настройки нужно сохранить;
- успешная симуляция не подтверждает будущую отправку и не заменяет поиск по подтверждённому реестру;
- текст `failure-message` помогает найти условие, но исправление выбирают по полям именно этого элемента и состоянию его зависимостей.
Как доказать, что группа ничего не изменила
Пока окно валидности не закончилось, отсутствие в Indexer ещё не окончательный вывод: группа может оставаться в пуле. После `LastValid` проверьте каждый txID и общий `group-id` в правильной сети и диапазоне раундов. Ни один элемент отклонённой группы не должен появиться как отдельная подтверждённая транзакция.
Минимальный пакет доказательств
- сеть, хеш упорядоченного набора, Group ID, все txID и допустимые раунды;
- исходный ответ отправки или `pool-error`, а при симуляции — раунд снимка состояния и `failed-at`;
- поиск всех txID и Group ID после завершения окна валидности;
- целевые балансы, остатки активов, состояние приложения и его ячейки (`boxes`) на сопоставимых подтверждённых раундах до и после;
- исправленная причина и новая группа с новым набором подписей, если повтор действительно нужен.
Не отправляйте пакет заново только из-за красного статуса в интерфейсе. После `LastValid` убедитесь, что группа не появилась в реестре и целевое состояние не изменилось. Лишь затем исправляйте найденную причину и собирайте новую группу с новыми подписями. Сохраните хеши, раунды и снимки состояния: по ним можно повторить проверку.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Algorand Developer Portal — Atomic Transaction Groups Algorand Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
- Algorand algod REST API — Simulate transaction Algorand Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
- Algorand algod REST API — Pending transaction information Algorand Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
- Algorand Indexer REST API — Search for transactions Algorand Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
- Algorand Developer Portal — Transaction reference Algorand Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
