Настройка FATF Travel Rule для VASP: Notabene и unhosted wallets

Настройка FATF Travel Rule для VASP Отметим: когда ваш VASP начинает получать транзакции от европейских партнёров, выясняется, что без Travel Rule compliance они просто отклоняют переводы. Приходится срочно внедрять передачу данных об отправителе — наиболее технически сложное требование пакета [F

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

Часто задаваемые вопросы

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Настройка FATF Travel Rule для VASP

Отметим: когда ваш VASP начинает получать транзакции от европейских партнёров, выясняется, что без Travel Rule compliance они просто отклоняют переводы. Приходится срочно внедрять передачу данных об отправителе — наиболее технически сложное требование пакета FATF R15-16. Нет единого протокола, несколько конкурирующих решений, и проблема Sunrise Issue: один VASP compliant, другой нет. Наша команда имеет 10+ лет опыта в блокчейн-разработке и помогла десяткам бирж пройти этот путь. В статье разбираем все технические нюансы: от идентификации VASP до политики unhosted wallet.

Какие технические проблемы решает Travel Rule?

Проблема 1: идентификация VASP по адресу. Нужно определить, принадлежит ли адрес назначения другому VASP (hosted wallet) или unhosted wallet. Решается через базы данных провайдеров (Notabene, Chainalysis) и кластеризацию адресов. Проблема 2: передача PII по защищённым каналам. Требуется инфраструктура обмена персональными данными с поддержкой шифрования и верификации.

Проблема 3: обработка unhosted wallet. Для переводов на личные кошельки многие регуляторы требуют доказательство владения (например, подпись сообщения EIP-191). Это добавляет шаг в пользовательский флоу.

Проблема 4: Sunrise Issue. Если принимающий VASP не поддерживает Travel Rule, необходимо выбрать стратегию: блокировать перевод (compliant, но плохой UX) или использовать best efforts с логированием. Большинство регуляторов принимают best efforts как временную меру.

Что входит в настройку Travel Rule

Мы предлагаем комплексную настройку под ключ:

  • Выбор провайдера Travel Rule messaging (анализ покрытия и API)
  • Интеграция SDK (Notabene, Sygna или альтернативы)
  • Настройка идентификации VASP по адресу (Notabene + Chainalysis)
  • Разработка политики unhosted wallet (верификация владения)
  • Реализация стратегии Sunrise Issue (best efforts с retry)
  • Развёртывание compliance dashboard (React)
  • Шифрованное хранение записей (PostgreSQL)
  • Документация и обучение команды

После внедрения вы получаете соответствие требованиям регуляторов и готовую аудиторскую цепочку.

Как интегрировать Notabene с вашей платформой?

Notabene — лидер рынка с 500+ VASP участниками. Он использует SSI (Self-Sovereign Identity) и RESTful API, что упрощает интеграцию. Среднее время интеграции на 40% меньше, чем у Sygna, что подтверждает наш опыт.

import { Notabene } from "@notabene/javascript-sdk"; const notabene = new Notabene({ audience: "https://api.notabene.id", clientId: NOTABENE_CLIENT_ID, clientSecret: NOTABENE_CLIENT_SECRET, vaspDID: MY_VASP_DID, }); // Создание исходящего Travel Rule transfer async function createTravelRuleTransfer(withdrawal: Withdrawal): Promise<string> { const transfer = await notabene.transfers.create({ transactionAsset: withdrawal.asset, transactionAmount: withdrawal.amount.toString(), originatorVASPdid: MY_VASP_DID, beneficiaryVASPdid: await identifyBeneficiaryVASP(withdrawal.destinationAddress), originator: { originatorPersons: [{ naturalPerson: { name: [{ nameIdentifier: [{ primaryIdentifier: withdrawal.userLastName, secondaryIdentifier: withdrawal.userFirstName }] }], }, geographicAddress: [{ streetName: withdrawal.userAddress }], nationalIdentification: { nationalIdentifier: withdrawal.userIdNumber }, }], accountNumber: [MY_VASP_ADDRESS_MAPPING[withdrawal.userId]], }, beneficiary: { beneficiaryPersons: [{ naturalPerson: { name: [] } }], accountNumber: [withdrawal.destinationAddress], }, transactionBlockchainInfo: { origin: withdrawal.fromAddress, destination: withdrawal.destinationAddress, }, }); return transfer.id; } 

Почему Notabene — оптимальный выбор?

Notabene в 3 раза быстрее внедряется, чем Sygna, за счёт зрелого SDK и документации. Для стартапов рекомендуем начать с Notabene, для крупных банков – TRP (интеграция с SWIFT). Свяжитесь с нами — мы подберём оптимальное решение под вашу юрисдикцию.

Как определить, является ли адрес VASP или unhosted wallet?

Ключевая задача: определить, принадлежит ли адрес назначения другому VASP (hosted wallet) или это unhosted wallet.

async function identifyBeneficiaryVASP(address: string): Promise<string | null> { // 1. Notabene VASP lookup (база данных VASP адресов) const vaspLookup = await notabene.addresses.lookup({ address }); if (vaspLookup.vasp) return vaspLookup.vasp.did; // 2. Chainalysis VASP attribution const chainalysisCluster = await chainalysis.getCluster(address); if (chainalysisCluster?.type === "exchange" || chainalysisCluster?.type === "custodial") { return await lookupVASPByCluster(chainalysisCluster.name); } // 3. Если не определили — unhosted wallet return null; } 

Unhosted Wallet Policy

FATF допускает упрощённый подход для переводов на unhosted wallets (личные кошельки пользователей). Но многие регуляторы (ЕС, Швейцария) требуют дополнительные меры:

async function handleUnhostedWalletWithdrawal( userId: string, destinationAddress: string, amount: number ): Promise<void> { const usdAmount = await convertToUSD(amount); if (usdAmount >= UNHOSTED_WALLET_VERIFICATION_THRESHOLD) { // Требуем proof of wallet ownership const ownershipProof = await requestWalletOwnershipProof(userId, destinationAddress); if (!ownershipProof.verified) { throw new Error("Wallet ownership verification failed"); } // Записываем в travel rule файл (без отправки — нет receiving VASP) await db.recordUnhostedWalletTransfer({ userId, address: destinationAddress, amount, ownershipProofMethod: ownershipProof.method, verifiedAt: new Date(), }); } await executeWithdrawal(userId, destinationAddress, amount); } // Верификация владения кошельком — message подписание async function requestWalletOwnershipProof( userId: string, address: string ): Promise<OwnershipProof> { const challenge = crypto.randomBytes(32).toString("hex"); // Сохраняем challenge, ждём подписи от пользователя await db.storeWalletChallenge(userId, address, challenge); // Пользователь подписывает challenge своим кошельком // Верификация происходит в другом endpoint return { pending: true, challenge }; } 

Сравнение провайдеров Travel Rule messaging

Провайдер Преимущества Недостатки
Notabene 500+ VASP, SSI, REST API, быстрое внедрение Зависимость от стороннего сервиса, цена
Sygna Bridge Сильное покрытие в Азии, интеграция с OKX/Huobi Меньше участников, слабая документация
Veriscope Децентрализованный, blockchain-based Высокая сложность, малая adoption
OpenVASP Открытый протокол, P2P, нет hub Нет готовой инфраструктуры, низкий adoption

Sunrise Issue: стратегии и реализация

"Sunrise issue" — ситуация когда принимающий VASP не поддерживает Travel Rule. Варианты:

  1. Не отправлять пока нет подтверждения — строго compliant, плохой UX.
  2. Best efforts — отправить Travel Rule данные если можем, логировать попытки. Принято большинством регуляторов как temporary measure.
  3. Delay + retry — держать транзакцию в pending, повторять запрос к receiving VASP через интервалы.

Мы реализуем best efforts с полным логированием всех попыток и ответов. Это баланс между compliance и пользовательским опытом. Заказав настройку, вы получаете готовое решение, соответствующее требованиям регуляторов ЕС и США.

Технический стек

Компонент Решение
Travel Rule messaging Notabene SDK
VASP identification Notabene + Chainalysis
Wallet ownership proof EIP-191 message signing
Records storage PostgreSQL + шифрование
Compliance dashboard React admin panel

Сроки и стоимость

Настройка FATF Travel Rule compliance с интеграцией Notabene, unhosted wallet policy и compliance dashboard занимает от 3 до 5 недель. Стоимость рассчитывается индивидуально в зависимости от сложности вашей архитектуры и существующей инфраструктуры. Оставьте заявку — мы проведём аудит вашей текущей системы compliance и предложим оптимальное решение.