ADAMANT Exchange Bot v3.0.0 — это важный этап развития проекта, включающий масштабную модернизацию стека выполнения, внедрение механизмов защиты средств уровня консенсуса, полное покрытие тестами и улучшение удобства работы для операторов.
Модернизация среды выполнения и архитектуры
Требования к движку обновлены до актуальной версии Node.js 22.13 или выше. Устаревшие зависимости web3-eth и web3-utils заменены на ethers v6 для управления Ethereum и токенами ERC-20. Процесс формирования транзакций для Bitcoin, Dash и Dogecoin обновлен до BitcoinJS-lib 7 с использованием частично подписанных транзакций Bitcoin (PSBT). Запросы к базе данных модернизированы с использованием MongoDB Driver 7, что позволило перейти на нативный асинхронный API на основе Promise и полностью отказаться от устаревших обратных вызовов (callbacks). Сетевое взаимодействие переведено на adamant-api 3.x с использованием AdamantApi и WebSocketClient. Устаревшие модули и параметры конфигурации Lisk (LSK) были полностью удалены. Проект перешел на плоскую конфигурацию ESLint 9, Prettier 3, Jest 30 и markdownlint для обеспечения современного уровня разработки.
Параллелизм, отслеживание депозитов и безопасность средств
Внедрен мониторинг депозитов в мемпуле с пятиминутным окном для разрешения спорных ситуаций, что защищает от условий гонки (race conditions) и попыток двойного списания. Реализована блокировка на уровне UTXO для предотвращения одновременной траты монет в блокчейнах с моделью UTXO, включая BTC, DASH и DOGE. Входящие запросы на обмен и отмену теперь сериализуются для каждого отправителя, чтобы исключить конфликты. Добавлено автоматическое распознавание и ускоренная обработка транзакций Dash InstantSend. Внедрен механизм unsupportedCoinGuard для корректной обработки переводов неподдерживаемых монет и сбоев при передаче данных в сети.
Чат-команды и UX оператора
Добавлена чат-команда /cancel (также распознается как cancel), позволяющая пользователям отменять ожидающие обмены, для которых требуется уточнение целевой монеты, и получать автоматический возврат средств за вычетом сетевой комиссии. Предыдущие депозиты теперь автоматически ставятся в очередь на возврат, если пользователь отправляет новый перевод, находясь в состоянии inUpdateState. Утилита formatNumber была улучшена для преобразования экспоненциальных чисел (e+ и e-) в удобный для чтения десятичный формат. В конфигурации и реестр монет добавлена поддержка токена Onyxcoin (XCN) стандарта ERC-20.
Конфигурация и отказоустойчивость узлов
В configSchema.js реализована строгая проверка схемы с немедленной остановкой при запуске (fail-fast), что позволяет выявлять некорректные конфигурации на раннем этапе. Создан отказоустойчивый nodeClient.js с поддержкой циклического перебора (round-robin) и автоматического переключения между несколькими RPC и REST эндпоинтами. Добавлены гранулярные настройки для каждой монеты: комиссии, лимиты подтверждений, суточные лимиты в USD и ценовые диапазоны.
Тестирование и документация
Добавлен комплексный набор из 31 тестового пакета Jest, включающий 690 модульных тестов, которые охватывают вспомогательные функции, криптографические адаптеры, проверку схемы конфигурации и модули обмена без использования внешних сетевых или баз данных. Операционная документация была расширена руководством по AI-агентам AGENTS.md, файлом CONTRIBUTING.md и обновленным README.md.
Критические изменения
Минимально поддерживаемая версия Node.js теперь 22.13, что требует от операторов обновления среды выполнения. Устаревшие web3-eth и web3-utils заменены на ethers v6, что может повлиять на пользовательские интеграции, зависящие от предыдущих API библиотек Ethereum. Формирование транзакций Bitcoin, Dash и Dogecoin теперь использует BitcoinJS-lib 7 с PSBT, что меняет внутренний процесс создания транзакций. MongoDB Driver 7 заменяет предыдущий драйвер, удаляя паттерны запросов на основе обратных вызовов. Все устаревшие модули и параметры конфигурации Lisk (LSK) были полностью удалены; операторам, имеющим конфигурации, связанные с LSK, необходимо удалить эти записи. Строгая проверка схемы теперь обеспечивает немедленную остановку при запуске, а это значит, что ранее допустимые некорректные значения конфигурации приведут к тому, что бот не запустится.