Перейти к содержанию

ADR: Интеграция с CryptoBilling (crypto2b.com) для обработки криптоплатежей

Статус: В разработке Дата создания: 2025-11-13 Автор: Claude Code Agent Уровень важности: HIGH

Контекст и проблема

Saga требует интеграции с внешним провайдером для обработки криптовалютных платежей (депозиты/выводы). Необходимо выбрать архитектурное решение для интеграции с CryptoBilling API (crypto2b.com), который поддерживает 15+ криптовалют и предоставляет REST API для обработки платежей.

Name: Dev Public key part: 70e1f787453a4d2290aa47fde0815bf4 Private: f+4WG3DP0ZjgKCFvwz7hVTmtLuYfgU+MdP4nWUn+4YP9Tu/8cYegagpOGqzkVJRAyvpkzE2nZL3I8uRQtbEN0g==

Анализ требований

Функциональные требования

  • Обработка депозитов криптовалют (BTC, ETH, USDT, USDC, и др.)
  • Выполнение выводов средств
  • Отслеживание статусов транзакций
  • Валидация лимитов и проверка рисков
  • Уведомления о изменении статусов операций
  • Поддержка различных блокчейн-сетей

Нефункциональные требования

  • Rate Limit: 10 rps (API ограничение)
  • Безопасность: API-key аутентификация
  • Надёжность: Идемпотентная обработка callbacks
  • Мониторинг: Логирование всех операций
  • Соответствие CLAUDE.md: Canonical implementation, error logging

Технический анализ CryptoBilling API

API Спецификации

Базовый URL: https://api.cryptobilling.com
Протокол: HTTPS/REST
Формат: JSON
Rate Limit: 10 rps
Аутентификация: API-key based
Формат времени: UTC ISO8601 (yyyy-MM-ddTHH:mm:ssZ)

Основные Endpoints

  1. Health - /health - проверка статуса API
  2. Instruments - /instruments/list - список криптовалют и лимитов
  3. Channels - /channels/take - получение адресов депозитов
  4. Deposits - /deposits/list, /deposits/{id} - управление депозитами
  5. Withdrawals - /withdrawals/list - обработка выводов
  6. Service Operations - история комиссионных транзакций

Workflow процессов

Deposit Flow:

sequenceDiagram
    participant U as User
    participant S as Saga
    participant C as CryptoBilling
    participant B as Blockchain

    U->>S: Запрос депозитного адреса
    S->>C: POST /channels/take
    C->>S: {address, tag?, expires}
    S->>U: Адрес для депозита
    U->>B: Отправка криптовалюты
    B->>C: Транзакция в блокчейне
    C->>S: Callback/Webhook уведомление
    S->>S: Обновление баланса пользователя

Withdrawal Flow:

sequenceDiagram
    participant U as User
    participant S as Saga
    participant C as CryptoBilling
    participant B as Blockchain

    U->>S: Запрос на вывод
    S->>S: Списание с баланса
    S->>C: POST /withdrawals
    C->>C: Проверка рисков
    C->>B: Отправка транзакции
    C->>S: Callback о статусе
    S->>U: Уведомление о выводе

Архитектурное решение

1. Структура модулей

backend/
├── services/
│   └── crypto2b/
│       ├── client.go           # HTTP клиент с rate limiting
│       ├── config.go           # Конфигурация из unified config
│       ├── types.go            # Типы запросов/ответов
│       ├── deposits.go         # Логика депозитов
│       ├── withdrawals.go      # Логика выводов
│       ├── callbacks.go        # Обработка webhooks
│       └── monitoring.go       # Метрики и логирование
├── handlers/
│   └── api/
│       ├── crypto2b_deposits.go    # API endpoints депозитов
│       ├── crypto2b_withdrawals.go # API endpoints выводов
│       └── crypto2b_callbacks.go   # Webhook endpoints
└── models/
    ├── crypto2b_transaction.go # Модели для БД
    └── crypto2b_instrument.go  # Модели криптовалют

2. Интеграционная архитектура

HTTP Client Layer: - Canonical HTTP клиент с retry logic (экспоненциальный backoff) - Rate limiting (9 rps с буфером для безопасности) - Timeout настройки из unified config - Структурированное логирование всех запросов/ответов

Service Layer: - Crypto2BService - основной сервис с dependency injection - DepositService - обработка депозитов с валидацией - WithdrawalService - обработка выводов с проверками - CallbackService - идемпотентная обработка webhooks

Data Layer: - Новые таблицы: crypto2b_transactions, crypto2b_instruments - Связь с существующими transactions, users - Индексы для быстрого поиска по external_id

3. Безопасность и валидация

Аутентификация: - API ключи из unified config (external_services.crypto2b.api_keys.dev) - Rotation strategy для production ключей - Secure storage в environment variables

Валидация: - Проверка лимитов через /instruments/list - Валидация адресов получателей - Проверка балансов перед выводом - Rate limiting на стороне Saga (защита от spam)

Идемпотентность: - Уникальные идентификаторы операций (UUID) - Защита от duplicate callbacks через transaction_id tracking - Retry logic с экспоненциальным backoff

4. Мониторинг и обработка ошибок

Логирование (CLAUDE.md compliance):

// Canonical logging обязательно для всех операций
logger.InfoCtx(ctx, "crypto2b_deposit_initiated",
    "user_id", userID,
    "amount", amount.String(),
    "currency", currency,
    "crypto2b_channel_id", channelID,
)

// ОБЯЗАТЕЛЬНОЕ логирование ошибок
logger.ErrorCtx(ctx, "crypto2b_api_error",
    "endpoint", "/deposits",
    "error", err.Error(),
    "response_code", response.StatusCode,
)

Метрики: - Количество успешных/неуспешных операций - Время ответа API crypto2b - Rate limit violations - Callback processing time

Circuit Breaker: - Автоматическое отключение при высокой частоте ошибок - Fallback механизмы для критичных операций - Health check endpoints

5. Конфигурация

Используем существующую unified config архитектуру:

# config/integrations.yaml (уже создан)
external_services:
  crypto2b:
    enabled: true
    base_url: "https://api.cryptobilling.com"
    api_version: "v1"

    api_keys:
      dev:
        name: "Dev"
        public_key: "${CRYPTO2B_DEV_PUBLIC_KEY}"
        private_key: "${CRYPTO2B_DEV_PRIVATE_KEY}"
        enabled: true

    security:
      timeout_seconds: 30
      max_retries: 3
      rate_limit_enabled: true
      rate_limit_requests: 9  # Под лимитом API (10 rps)
      rate_limit_window: 1    # 1 секунда

    callbacks:
      base_url: "${CRYPTO2B_CALLBACK_BASE_URL}"  # Наш URL для webhooks
      secret_token: "${CRYPTO2B_CALLBACK_SECRET}" # Для валидации

6. Database Schema

-- Инструменты (криптовалюты)
CREATE TABLE crypto2b_instruments (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    currency VARCHAR(10) NOT NULL UNIQUE,
    network VARCHAR(50) NOT NULL,
    min_amount DECIMAL(36,18) NOT NULL,
    max_amount DECIMAL(36,18) NOT NULL,
    fee_fixed DECIMAL(36,18) DEFAULT 0,
    fee_percent DECIMAL(8,4) DEFAULT 0,
    confirmations_required INT DEFAULT 1,
    enabled BOOLEAN DEFAULT true,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Транзакции crypto2b
CREATE TABLE crypto2b_transactions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES users(id),

    -- Связь с нашими транзакциями
    saga_transaction_id UUID REFERENCES transactions(id),

    -- Данные crypto2b
    crypto2b_id VARCHAR(255) UNIQUE, -- ID от crypto2b
    operation_type VARCHAR(20) NOT NULL, -- 'deposit' | 'withdrawal'
    status VARCHAR(50) NOT NULL, -- 'pending' | 'confirmed' | 'failed'

    -- Финансовые данные
    amount DECIMAL(36,18) NOT NULL,
    currency VARCHAR(10) NOT NULL,
    network VARCHAR(50),

    -- Адреса и детали
    address TEXT,
    tag TEXT, -- Для XRP, EOS и др.
    txhash TEXT, -- Hash транзакции в блокчейне

    -- Комиссии
    fee_amount DECIMAL(36,18) DEFAULT 0,
    fee_currency VARCHAR(10),

    -- Техническая информация
    external_data JSONB, -- Полный ответ от API
    retry_count INT DEFAULT 0,
    last_callback_at TIMESTAMPTZ,

    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Индексы для производительности
CREATE INDEX idx_crypto2b_transactions_user_id ON crypto2b_transactions(user_id);
CREATE INDEX idx_crypto2b_transactions_crypto2b_id ON crypto2b_transactions(crypto2b_id);
CREATE INDEX idx_crypto2b_transactions_status ON crypto2b_transactions(status);
CREATE INDEX idx_crypto2b_transactions_created_at ON crypto2b_transactions(created_at);

Альтернативы рассмотренные

1. Прямая интеграция с блокчейн-нодами

Плюсы: Полный контроль, нет комиссий посредникам Минусы: Сложность поддержки 15+ блокчейнов, необходимость собственной инфраструктуры мониторинга Решение: Отклонено из-за высокой сложности

2. Другие провайдеры (Coinbase Commerce, BitPay)

Плюсы: Альтернативные решения Минусы: Нет готовых API ключей, необходима новая регистрация Решение: Отклонено, так как crypto2b уже настроен

3. Синхронная обработка без callbacks

Плюсы: Простая реализация Минусы: Неэффективный polling, высокая нагрузка на API Решение: Отклонено, выбрана асинхронная модель с callbacks

Последствия решения

Положительные

  • Быстрая интеграция: API ключи уже получены
  • Масштабируемость: Поддержка 15+ криптовалют из коробки
  • Надёжность: Проверенная система обработки платежей
  • Соответствие CLAUDE.md: Canonical implementation, proper error handling

Риски и митигация

  • Rate Limiting (10 rps): Митигация через queue и batch processing
  • Зависимость от внешнего API: Мониторинг, circuit breakers, fallbacks
  • Callback delivery: Идемпотентность, retry mechanisms
  • Security: Secure key storage, callback validation

Технический долг

  • Необходимость поддержки совместимости с существующей системой транзакций
  • Миграция данных при смене провайдера в будущем
  • Возможное дублирование логики валидации между Saga и CryptoBilling

План реализации

Этап 1: Foundation (1-2 дня)

  • Создание базовых типов и структур
  • HTTP клиент с rate limiting
  • Базовая конфигурация и тесты

Этап 2: Core API Integration (2-3 дня)

  • Реализация Instruments API (получение списка криптовалют)
  • Реализация Channels API (генерация депозитных адресов)
  • Базовые unit тесты

Этап 3: Deposits Flow (3-4 дня)

  • Создание депозитных адресов
  • Обработка callbacks депозитов
  • Интеграция с существующей системой транзакций
  • Integration тесты

Этап 4: Withdrawals Flow (3-4 дня)

  • API для инициации выводов
  • Валидация балансов и лимитов
  • Обработка callbacks выводов
  • End-to-end тесты

Этап 5: Monitoring & Production (2-3 дня)

  • Метрики и мониторинг
  • Error handling и retry logic
  • Security audit
  • Deployment и smoke тесты

Общая оценка: 11-16 дней разработки

Критерии принятия решения

  1. ✅ Техническая совместимость - REST API совместим с Saga архитектурой
  2. ✅ Безопасность - API-key аутентификация, HTTPS, валидация callbacks
  3. ✅ Производительность - 10 rps достаточно для MVP
  4. ✅ Поддержка криптовалют - 15+ валют покрывают потребности
  5. ✅ Документация - достаточная для интеграции
  6. ✅ Готовность - API ключи уже получены

Заключение

Интеграция с CryptoBilling (crypto2b.com) является оптимальным архитектурным решением для обработки криптоплатежей в Saga. Решение обеспечивает необходимую функциональность при соблюдении принципов CLAUDE.md и архитектурных стандартов проекта.

Статус: Готов к реализации Следующие шаги: Создание epic задач для каждого этапа реализации


ADR создан в соответствии с архитектурными принципами Saga и требованиями CLAUDE.md