Настройка 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. Варианты:
- Не отправлять пока нет подтверждения — строго compliant, плохой UX.
- Best efforts — отправить Travel Rule данные если можем, логировать попытки. Принято большинством регуляторов как temporary measure.
- 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 и предложим оптимальное решение.







