cryptofoundry

Связаться с cryptofoundry

Расскажите, что вы хотите создать или автоматизировать.

Электронная почта
[email protected]
ADAMANT Messenger
Открыть в ADAMANT
Ecosystem & Integrations

ADAMANT Exchange Bot v3.0.0: модернизация среды выполнения и обеспечение безопасности средств уровня консенсуса

ADAMANT Exchange Bot — это программное обеспечение для самостоятельного развертывания, предназначенное для организации мгновенного анонимного обмена криптовалют внутри чатов ADAMANT Messenger с сквозным шифрованием. Бот работает с горячими кошельками Bitcoin, Ethereum, Dash, Dogecoin и ADAMANT без участия сторонних хранителей и использования открытых веб-интерфейсов. Версия 3.0.0 модернизирует стек среды выполнения, переводит криптографию и интеграцию с блокчейнами на современные библиотеки, обеспечивает инварианты безопасности средств уровня консенсуса за счет блокировки UTXO и мьютексов на уровне запросов, а также добавляет внешний механизм отслеживания заявок на депозит с 5-минутным окном для разрешения споров. Аудит безопасности и техническое обслуживание осуществляются cryptofoundry в сотрудничестве с сообществом разработчиков ADAMANT.

Модернизация стека и архитектуры

Кодовая база теперь ориентирована на Node.js 22.13+ LTS с обновленными параметрами engines в package.json и ограничениями .nvmrc. Взаимодействие с Ethereum и ERC-20 полностью переведено с устаревших web3-eth и web3-utils на ethers v6, что обеспечивает детерминированные вызовы контрактов, точную оценку газа и надежное управление nonce. Формирование транзакций для Bitcoin, Dash и Dogecoin перенесено на Partially Signed Bitcoin Transactions (PSBT) через bitcoinjs-lib 7, что позволило отказаться от устаревшего TransactionBuilder. Запросы MongoDB 7 в коллекциях payments, incomingtxs и systems теперь используют нативный async/await на основе Promise, что исключает использование callback-функций. Интеграция с клиентом Node обновлена до adamant-api 3.x с использованием AdamantApi и WebSocketClient с современными вспомогательными функциями деривации ключей. Поддержка Lisk (LSK) полностью удалена, включая зависимости @liskhq/*, lsk_utils.js, lskBaseCoin.js и соответствующие параметры конфигурации. Инструментарий разработки теперь использует плоскую конфигурацию ESLint 9, Prettier 3 и Jest 30.

Гарантии параллелизма и инварианты безопасности средств

Автономная работа обменника требует финансовой безопасности уровня консенсуса: курсы, комиссии, десятичные разряды и балансы должны быть точными, а выплаты или возвраты — строго идемпотентными.

В сетях на основе UTXO параллельные выплаты или возвраты ранее создавали риск условий гонки (race conditions), при которых несколько транзакций пытались потратить одни и те же неиспользованные выходы. В версии 3.0.0 представлен асинхронный мьютекс в памяти (helpers/mutex.js и btcBaseCoin.js), который блокирует выбранные UTXO во время создания и подписи PSBT. UTXO остаются заблокированными до подтверждения трансляции в сети. Если сборка или отправка транзакции завершается неудачей, заблокированные UTXO безопасно возвращаются в пул доступных средств, что предотвращает зависание балансов без риска двойной траты.

Входящие команды чата, события новых переводов и запросы на отмену от одного и того же пользователя синхронизируются через мьютекс для каждого отправителя в incomingTxsParser.js, что исключает условия гонки при одновременной отправке переводов или инициировании возвратов. Каждая запись о платеже проходит через детерминированные состояния (inProcessing, needToSendBack, sent, refunded), которые сохраняются в MongoDB перед отправкой в сеть. В случае перезапуска бота или потери связи во время перевода, ожидающие платежи сверяются и возобновляются без риска двойной траты.

Отслеживание депозитов и жизненный цикл заявок

Внешние депозиты требуют сопоставления транзакций в блокчейне с идентификаторами чата ADAMANT. Модуль modules/depositWatcher.js отслеживает неподтвержденные и входящие транзакции через реализацию getPendingIncomingTransactions каждого адаптера без использования централизованных вебхуков. modules/depositClaims.js отслеживает заявки на депозит на протяжении всего их жизненного цикла, чтобы предотвратить повторное востребование одного и того же хеша транзакции. Обязательное 5-минутное окно для разрешения споров защищает от реорганизаций блокчейна, атак типа race attack и попыток двойного востребования перед выполнением выплаты. modules/deepExchangeValidator.js криптографически проверяет депозиты на соответствие записям адресов в Key-Value Storage (KVS) отправителя ADAMANT с использованием кэширования и логики автоматического повтора.

UX обмена и улучшения команд чата

Пользователи, отправившие депозит без указания пары для обмена, могут ввести /cancel (или cancel) в чате, чтобы отменить ожидающий обмен и автоматически получить депозит обратно за вычетом сетевой комиссии. Если пользователь с депозитом в состоянии inUpdateState отправляет новый перевод вместо уточнения целевой валюты, бот теперь ставит предыдущий депозит в очередь на автоматический возврат, а не отменяет его. Вспомогательная функция utils.formatNumber была переработана для преобразования научной нотации (e+ / e-) в читаемые человеком полные десятичные строки перед группировкой цифр и применением жирного шрифта, что устраняет ошибки отображения пробелов или артефакты экспоненты для чисел большой величины или токенов с большим количеством десятичных знаков. Добавлена нативная поддержка конфигурации и реестра для токена ERC-20 Onyxcoin (XCN).

Схема конфигурации и отказоустойчивость нескольких узлов

Файлы конфигурации (config.jsonc, config.default.jsonc) при запуске проходят строгую проверку на соответствие декларативным схемам в modules/configSchema.js. Отсутствующие ключи, неизвестные криптовалюты в accepted_crypto или монеты, настроенные без узлов, вызывают немедленную остановку с ошибкой (fail-fast). Отказоустойчивый клиент для нескольких узлов в helpers/cryptos/nodeClient.js автоматически переключается между настроенными конечными точками HTTP и JSON-RPC, обрабатывая случаи отключения или рассинхронизации узлов блокчейна. Операторы могут задавать специфичные для тикера переопределения сетевых комиссий (exchange_fee_<COIN>), требуемого количества подтверждений (min_confirmations_<COIN>), дневных лимитов объема в USD (daily_limit_usd_<COIN>) и ценовых ограничений (fixed_buy_price_usd_<COIN>, min_sell_price_usd_<COIN>).

Тестирование и руководство по эксплуатации

Набор тестов включает 31 комплект Jest и 690 модульных тестов, охватывающих основные модули обмена, адаптеры криптовалют, схемы конфигурации и утилиты без необходимости использования активных узлов, MongoDB или реальных приватных ключей. Конвенции репозитория, техническая архитектура, правила инвариантов и дисциплина внесения изменений формализованы в файле AGENTS.md.