Интеграция с Notabene (Travel Rule compliance)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с Notabene (Travel Rule compliance)
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Интеграция с Notabene (Travel Rule compliance)

Notabene — ведущий Travel Rule messaging провайдер с покрытием 500+ VASP в 30+ странах. SDK доступен для JavaScript/TypeScript, Python и Go. Интеграция занимает 1-2 недели.

SDK setup и аутентификация

import { NotabeneSDK } from "@notabene/javascript-sdk";

const sdk = new NotabeneSDK({
  audience: "https://api.notabene.id",
  clientId: process.env.NOTABENE_CLIENT_ID,
  clientSecret: process.env.NOTABENE_CLIENT_SECRET,
  vaspDID: process.env.MY_VASP_DID,
});

Исходящий перевод: полный flow

async function processOutgoingTransferTravelRule(withdrawal: Withdrawal) {
  // 1. Идентификация VASP получателя
  const { vasp: beneficiaryVASP } = await sdk.addresses.lookup({
    address: withdrawal.destinationAddress,
    asset: withdrawal.asset,
  });
  
  if (!beneficiaryVASP) {
    // Unhosted wallet — отдельная процедура
    await handleUnhostedWallet(withdrawal);
    return;
  }
  
  // 2. Создание transfer record
  const transfer = await sdk.transfers.create({
    transactionAsset: withdrawal.asset,
    transactionAmount: withdrawal.amount.toString(),
    originatorVASPdid: process.env.MY_VASP_DID,
    beneficiaryVASPdid: beneficiaryVASP.did,
    originator: buildOriginatorInfo(withdrawal.user),
    beneficiary: { beneficiaryPersons: [], accountNumber: [withdrawal.destinationAddress] },
    transactionBlockchainInfo: {
      origin: withdrawal.fromAddress,
      destination: withdrawal.destinationAddress,
    },
  });
  
  // 3. Ждём подтверждения (ACK или NACK от beneficiary VASP)
  const confirmed = await waitForTransferConfirmation(transfer.id);
  
  if (!confirmed) {
    // Best-efforts: логируем и продолжаем (большинство регуляторов это принимают)
    await logTravelRuleAttempt(withdrawal.id, transfer.id, "NO_RESPONSE");
  }
  
  // 4. Выполняем вывод
  await executeBlockchainWithdrawal(withdrawal);
}

Входящий перевод: получение Travel Rule данных

// Webhook от Notabene при получении Travel Rule data
app.post("/webhooks/notabene", async (req, res) => {
  const { type, transfer } = req.body;
  
  if (type === "transfer.created") {
    await handleIncomingTravelRuleData(transfer);
  }
  
  res.status(200).send();
});

async function handleIncomingTravelRuleData(transfer: NotabeneTransfer) {
  // Сохраняем полученные данные
  await db.saveTravelRuleRecord({
    externalId: transfer.id,
    senderVASP: transfer.originatorVASPdid,
    originator: transfer.originator,
    destinationAddress: transfer.transactionBlockchainInfo.destination,
    asset: transfer.transactionAsset,
    amount: transfer.transactionAmount,
  });
  
  // Подтверждаем получение
  await sdk.transfers.update(transfer.id, { status: "ACK" });
}

Статусы transfer и обработка

Статус Значение Действие
CREATED Создан, ожидает Ничего
SENT Отправлен beneficiary VASP Ждём ответ
ACK Получатель подтвердил Выполнить перевод
NACK Получатель отказал Отменить или эскалировать
EXPIRED Нет ответа за timeout Best-efforts → выполнить с логом

Интеграция Notabene в процесс ввода и вывода средств, включая webhook handling и unhosted wallet flow — 1-2 недели.