Слогер Создать блог
Разработка

Интеграция Monero в Node.js: RPC, подадреса и продакшн

Полное руководство по подключению криптовалюты Monero к Node.js-приложению: от настройки кошелька и RPC-сервера до генерации подадресов и мониторинга платежей.

Подготовка окружения

Для интеграции Monero в Node.js-проект потребуется установленный демон Monero и кошелёк с поддержкой RPC. Убедитесь, что у вас есть доступ к узлу сети (mainnet или testnet) и создан файл кошелька. Настройка начинается с запуска демона и кошелька в режиме RPC.

Запуск кошелька Monero в режиме RPC

Кошелёк Monero может работать как RPC-сервер, к которому будет обращаться ваше Node.js-приложение. Для тестирования можно запустить его вручную с параметрами подключения к тестовой сети:

./monero-wallet-rpc \ --wallet-file /var/lib/monero/wallets/myzubster \ --password "STRONG_PASSWORD_HERE" \ --rpc-bind-port 18083 \ --rpc-bind-ip 127.0.0.1 \ --daemon-address testnet.community:28081 \ --testnet \ --disable-rpc-login \ --log-level 0 \ --non-interactive

Проверить, что RPC работает, можно через curl-запрос метода get_version. В ответе должен прийти JSON с версией.

Создание systemd-сервиса для продакшна

Для стабильной работы в production лучше оформить запуск кошелька как системный сервис. Создайте файл /etc/systemd/system/monero-wallet-rpc.service с описанием юнита, указав ExecStart с теми же параметрами. Включите автозапуск и проверьте статус сервиса.

Node.js-сервис для работы с Monero

Установите axios для HTTP-запросов и создайте модуль moneroService.js. Он будет инкапсулировать все RPC-вызовы к кошельку. Основные функции:

  • rpc(method, params) — универсальный метод для JSON-RPC запросов;
  • generateSubaddress(label) — создание подадреса для конкретного заказа;
  • getBalance(accountIndex) — получение баланса;
  • checkPayment(address, amount, confirmations) — проверка поступления платежа на подадрес;
  • sendPayment(destination, amount) — отправка XMR;
  • getTransaction(txid) — детали транзакции;
  • getSubaddresses() — список всех подадресов.

Все суммы конвертируются из атомарных единиц (1 XMR = 1e12 атомарных единиц).

Генерация подадресов для заказов

При создании заказа вызывается generateSubaddress с меткой, содержащей ID заказа. Полученный подадрес сохраняется в модели Order. Это позволяет отслеживать платежи по каждому заказу отдельно.

Мониторинг входящих платежей

Фоновый процесс (paymentMonitor.js) периодически опрашивает кошелёк на предмет новых транзакций по активным подадресам. При обнаружении платежа статус заказа меняется на «detected», а после достижения нужного числа подтверждений — на «confirmed». Интервал опроса настраивается через переменную окружения.

Переменные окружения

Все настройки выносятся в .env: URL RPC, адрес кошелька, количество подтверждений, таймауты и т.д. Это упрощает конфигурирование под разные среды.

Тестирование интеграции

Проверьте генерацию подадреса прямым RPC-запросом:

curl -X POST http://127.0.0.1:18083/json_rpc \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":"0","method":"create_address","params":{"label":"test-order"}}'

Затем протестируйте полный цикл создания заказа, оплаты и подтверждения через API вашего приложения.

Возможные проблемы

Если RPC-сервер не видит демон, проверьте доступность узла и параметры подключения. Ошибка «no connection to daemon» решается проверкой сети и перезапуском сервисов. Также стоит убедиться, что порты не заблокированы фаерволом.

Интеграция Monero через RPC и подадреса даёт надёжный механизм приёма платежей с минимальными задержками и полным контролем на стороне сервера.

По материалам: dev.to. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.