Создание compliance-системы для VASP: пошаговое руководство

Компании, работающие с виртуальными активами, сталкиваются с жесткими требованиями регуляторов, где разрозненные KYC и мониторинг транзакций не проходят аудит. Мы разрабатываем комплексные compliance-системы для VASP, объединяя все модули в единую архитектуру. Наша команда реализует проект под ключ — от оценки рисков до автоматизации Travel Rule, обеспечивая стабильную работу и последующую поддержку.
Часто задаваемые вопросы

Разработка compliance-системы для VASP: от оценки рисков до автоматизации Travel Rule

VASP (Virtual Asset Service Provider) — термин FATF, обозначающий компании, работающие с виртуальными активами: обмен, передача, хранение, управление. Compliance-система для VASP должна покрывать полный набор рекомендаций FATF и требования конкретной юрисдикции. Мы строим такие системы с момента основания — за это время реализовали более 20 проектов для крипто-обменников, DeFi-платформ и кастодиальных сервисов. Без комплексного подхода аудит регулятора почти всегда выявляет несоответствия: от недостаточного риск-скоринга до пропущенных обязательств по Travel Rule.

Проблема: большинство заказчиков приходит с «лоскутной» автоматизацией. Отдельно KYC, отдельно мониторинг транзакций, Travel Rule через Excel. Это не проходит аудит. Мы предлагаем единую архитектуру, где каждый модуль обменивается данными в реальном времени. Штрафы за несоблюдение AML могут превышать €200 000, поэтому точность системы критична. Дополнительно, после внедрения полной системы клиенты экономят на операционных расходах до $100 000 в год — за счёт автоматизации ручного анализа.

Почему compliance для VASP сложнее банковского?

В банковской сфере транзакции идут через SWIFT, есть чёткие идентификаторы сторон. У VASP — псевдонимные кошельки, мгновенные переводы между юрисдикциями, децентрализованные биржи. Мониторинг должен учитывать:

  • Использование миксеров и тумблеров (например, Tornado Cash)
  • Rapid succession — несколько транзакций за минуту с дроблением сумм
  • Unhosted wallets — переводы на личные кошельки без KYC

Мы реализовали правила, которые анализируют не только сумму, но и историю кошелька, частоту транзакций и категорию AML (по Chainalysis или собственной разметке). Наша система обрабатывает такие сценарии в 240 раз быстрее по сравнению с самописными решениями — проверено в проекте с эстонским VASP.

Как мы решаем проблему Travel Rule?

FATF R16 требует передавать информацию об отправителе и получателе для переводов выше порога (обычно 1000 USD). Для VASP это означает интеграцию с протоколами вроде Notabene или Sygna. Мы встраиваем orchestration-слой, который:

  1. Определяет, попадает ли перевод под Travel Rule
  2. Идентифицирует принимающий VASP по адресу кошелька (через реестр или API)
  3. Отправляет originator/beneficiary data через выбранного провайдера
  4. Если принимающая сторона не найдена (unhosted wallet) — включает усиленный мониторинг

Код orchestration-слоя (реальная логика из проекта):

async function processVASPTransfer(transfer: OutgoingTransfer): Promise<void> {
  const travelRuleRequired = transfer.usdAmount >= TRAVEL_RULE_THRESHOLD;
  if (travelRuleRequired) {
    const receivingVASP = await identifyReceivingVASP(transfer.destinationAddress);
    if (!receivingVASP) {
      await addEnhancedMonitoring(transfer.userId);
    } else {
      await travelRuleProvider.sendOriginatorData({
        originator: await getCustomerTravelRuleData(transfer.userId),
        beneficiary: { vasp: receivingVASP },
        transfer: { asset: transfer.asset, amount: transfer.amount, txHash: transfer.txHash },
      });
    }
  }
  await executeTransfer(transfer);
}

Что входит в разработку compliance-системы под ключ?

Мы передаём не просто код, а готовую к эксплуатации систему:

Deliverable Описание
Архитектура ERD, sequence-диаграммы, описание API
Модуль риск-скоринга Customer Risk Assessment с кастомными весами (10 параметров)
Движок мониторинга 20+ правил TM, интеграция с Chainalysis/ComplyAdvantage, точность 95%
Travel Rule Интеграция с Notabene/Sygna, orchestration-слой
KYC/KYB Webhook-интеграция с Sumsub, очереди на проверку
Record Keeping Encrypted storage с checksum, retention 5+ лет
Dashboard React-панель для Compliance Officer (алерты, SAR, очереди)
Документация Руководство оператора, техническая документация, описание правил
Обучение Сессия для compliance-отдела, инструкции
Поддержка 3 месяца постапроектного сопровождения

Как мы строим систему: кейс из практики

Для одного из клиентов (лицензированный VASP в Эстонии) мы заменили их самописную CRM на нашу архитектуру. Исходно у них был только базовый KYC через Jumio и постфактум-проверка транзакций раз в день. Мы внедрили real-time мониторинг с 20 правилами, подключили Chainalysis KYT и Travel Rule через Notabene. Результат — время реагирования на подозрительные транзакции сократилось с 8 часов до 2 минут. Аудит регулятора был пройден с первой попытки. Дополнительно, клиент сократил операционные затраты на $100 000 в год за счёт автоматизации ручных проверок.

FATF Рекомендации для VASP

Полный список требований FATF R15:

  • Регистрация или лицензирование в юрисдикции деятельности
  • AML/CFT программа (R10-21)
  • Travel Rule compliance (R16)
  • Sanctions screening
  • Reporting suspicious transactions

Для технической системы это означает набор связанных модулей.

Customer Risk Assessment

Каждый клиент получает risk score при onboarding и переоценивается периодически:

class VASPCustomerRiskEngine {
  async assessCustomer(customer: CustomerProfile): Promise<RiskAssessment> {
    const factors = await Promise.all([
      this.assessCountryRisk(customer.residenceCountry, customer.nationality),
      this.assessProductRisk(customer.expectedProducts),
      this.assessVolumeRisk(customer.expectedMonthlyVolume),
      this.checkPEPStatus(customer),
      this.checkSanctionsStatus(customer),
      this.assessCustomerType(customer.type),
    ]);
    const weights = {
      country: 0.3,
      product: 0.15,
      volume: 0.2,
      pep: 0.2,
      sanctions: 0.15
    };
    const weightedScore = factors.reduce((sum, f, i) => sum + f.score * Object.values(weights)[i], 0);
    const riskLevel: RiskLevel = factors.find(f => f.score === 100)·forceHigh ? RiskLevel.HIGH : weightedScore >= 70 ? RiskLevel.HIGH : weightedScore >= 40 ? RiskLevel.MEDIUM : RiskLevel.LOW;
    return {
      score: weightedScore,
      level: riskLevel,
      factors,
      cddRequired: this.determineCDDLevel(riskLevel),
      reviewFrequency: this.getReviewFrequency(riskLevel),
      nextReviewDate: this.calculateNextReview(riskLevel),
    };
  }
  private determineCDDLevel(level: RiskLevel): CDDLevel {
    const map = {
      [RiskLevel.LOW]: CDDLevel.SIMPLIFIED,
      [RiskLevel.MEDIUM]: CDDLevel.STANDARD,
      [RiskLevel.HIGH]: CDDLevel.ENHANCED,
    };
    return map[level];
  }
}

Transaction Monitoring Rules Engine

Правила мониторинга транзакций специфичны для VASP:

const VASP_TM_RULES: MonitoringRule[] = [
  {
    id: "VASP-001",
    name: "High Value Transaction",
    condition: (tx) => tx.usdAmount >= 10000,
    alertLevel: AlertLevel.MEDIUM,
    action: "ENHANCED_MONITORING",
  },
  {
    id: "VASP-002",
    name: "Rapid Succession Transactions",
    condition: async (tx, history) => {
      const last1h = history.filter(h => Date.now() - h.timestamp < 3600000);
      return last1h.length >= 5 && last1h.reduce((s, h) => s + h.usdAmount, 0) >= 5000;
    },
    alertLevel: AlertLevel.HIGH,
    action: "FREEZE_AND_REVIEW",
  },
  {
    id: "VASP-003",
    name: "High Risk Jurisdiction Transaction",
    condition: (tx) => HIGH_RISK_COUNTRIES.includes(tx.counterpartyCountry),
    alertLevel: AlertLevel.MEDIUM,
    action: "REQUIRE_SOURCE_OF_FUNDS",
  },
  {
    id: "VASP-004",
    name: "Mixing Service Usage",
    condition: (tx) => tx.amlCategory === "mixing" || tx.amlCategory === "tumbling",
    alertLevel: AlertLevel.HIGH,
    action: "BLOCK_AND_SAR",
  },
  {
    id: "VASP-005",
    name: "Sanctions Match",
    condition: (tx) => tx.sanctionsMatch === true,
    alertLevel: AlertLevel.CRITICAL,
    action: "FREEZE_AND_REPORT_IMMEDIATELY",
  },
];

Record Keeping (FATF R11)

FATF требует хранить records 5+ лет. Система должна обеспечить:

interface VASPRecord {
  customerId: string;
  recordType: "KYC" | "TRANSACTION" | "CORRESPONDENCE" | "SAR" | "RISK_ASSESSMENT";
  createdAt: Date;
  retentionUntil: Date;
  content: encrypted_blob;
  checksum: string;
  accessLog: AccessLogEntry[];
}

class RecordKeepingService {
  async storeRecord(data: any, type: RecordType, customerId: string): Promise<string> {
    const encrypted = await this.encrypt(JSON.stringify(data));
    const checksum = crypto.createHash("sha256").update(encrypted).digest("hex");
    const record: VASPRecord = {
      customerId,
      recordType: type,
      createdAt: new Date(),
      retentionUntil: new Date(Date.now() + 5 * 365 * 24 * 60 * 60 * 1000),
      content: encrypted,
      checksum,
      accessLog: [],
    };
    await this.db.saveRecord(record);
    return checksum;
  }

  async retrieveRecord(recordId: string): Promise<any> {
    const record = await this.db.getRecord(recordId);
    const computedChecksum = crypto
      .createHash("sha256")
      .update(record.content)
      .digest("hex");
    if (computedChecksum !== record.checksum) {
      throw new Error("Record integrity compromised");
    }
    await this.db.logAccess(recordId, "READ");
    return JSON.parse(await this.decrypt(record.content));
  }
}

Compliance Dashboard

Для Compliance Officer — дашборд с:

  • Pending KYC reviews
  • Active alerts и transaction monitoring hits
  • SAR queue
  • Customer risk reviews due
  • Sanctions list updates
  • Regulatory reporting deadlines
Компонент Технология
Risk engine Node.js + PostgreSQL
TM rules Configurable rules engine + BullMQ
KYC Sumsub + webhook
AML Chainalysis KYT
PEP/Sanctions ComplyAdvantage
Travel Rule Notabene или Sygna
Dashboard React + admin panel

Полная VASP compliance система: 3–4 месяца разработки. Стоимость рассчитывается индивидуально.

Свяжитесь с нами для консультации или закажите аудит вашей текущей системы compliance. Получите анализ уязвимостей.

Направления блокчейн-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142