Налаштування 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); } // Верифікація володіння гаманцем — підписання повідомлення 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 та запропонуємо оптимальне рішення.







