Розробка системи блокування підозрілих адрес для DeFi та CEX

Ми стикалися з ситуацією, коли DeFi-протокол втрачав значну суму через взаємодію з адресою, включеною до санкційного списку OFAC через 40 хвилин після публікації. **Система блокування підозрілих адрес** повинна перевіряти кожен запит проти актуального blacklist з latency <10ms і пропускною здатністю

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

Часті запитання

Останні роботи

  • 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

Ми стикалися з ситуацією, коли DeFi-протокол втрачав значну суму через взаємодію з адресою, включеною до санкційного списку OFAC через 40 хвилин після публікації. Система блокування підозрілих адрес повинна перевіряти кожен запит проти актуального blacklist з latency <10ms і пропускною здатністю до 10 000 rps. Ми будуємо дворівневу архітектуру: on-chain смарт-контракт для децентралізованих протоколів та off-chain сервіс для централізованих бірж. Гарантуємо точність з нульовим false negative і зниження gas cost на 15%.

Як працює автоматичне оновлення системи блокування підозрілих адрес?

Ключова проблема — джерела санкційних списків оновлюються асинхронно. OFAC публікує оновлення кілька разів на тиждень, Chainalysis — в real-time. Наша система об'єднує їх через єдиний API з використанням ETag та кешування. Це дозволяє синхронізувати blacklist менш ніж за 300 секунд після виходу оновлення. Завдяки Bloom filter ймовірність false positive не перевищує 0.1% при швидкості перевірки адреси менше 5 мс.

// Cron: кожну годину перевіряємо оновлення OFAC @Cron("0 * * * *") async syncOFACList() { const etag = await this.cache.get("ofac_etag"); const response = await fetch("https://www.treasury.gov/ofac/downloads/SDN_advanced.xml", { headers: etag ? { "If-None-Match": etag } : {}, }); if (response.status === 304) return; // не змінився const xml = await response.text(); const addresses = parseOFACCryptoAddresses(xml); await this.blocklist.updateAddresses(addresses, "OFAC"); await this.cache.set("ofac_etag", response.headers.get("ETag")); this.logger.log(`OFAC sync: ${addresses.length} crypto addresses`); } 

Для Chainalysis використовуємо streaming API — кожна нова підозріла подія негайно надсилається до черги RabbitMQ і обробляється за <500ms.

Чому дворівнева архітектура необхідна для системи блокування підозрілих адрес?

Одношаровий on-chain блокліст неефективний для high-load систем: gas cost при кожній транзакції високий, а оновлення займає час. Ми розділяємо on-chain (смарт-контракт) та off-chain (сервіс з Bloom filter) рівні. Off-chain перевірка через Bloom filter у 5 разів швидша за повне сканування, а on-chain модифікатор notBlocked додає всього 100 gas до звичайного виклику. False positive rate налаштовується — зазвичай менше 0.1% при нульовому false negative.

Метрика On-chain Off-chain
Latency перевірки ~500 ms (включаючи gas) <5 ms
Пропускна здатність ~100 rps >10 000 rps
False negative 0% 0%
Джерело Оновлення Вартість Підтримка
OFAC SDN Кілька разів/тиждень Безкоштовно Так
EU Sanctions Раз/день Безкоштовно Так
Chainalysis Real-time Платно API
Elliptic Real-time Платно API

On-chain блокліст (для смарт-контрактів) — розробка системи блокування

contract AddressBlocklist { // Управління через multisig або governance address public admin; mapping(address => bool) public blocked; mapping(address => string) public blockReasons; event AddressBlocked(address indexed addr, string reason); event AddressUnblocked(address indexed addr); function blockAddress(address addr, string calldata reason) external onlyAdmin { blocked[addr] = true; blockReasons[addr] = reason; emit AddressBlocked(addr, reason); } function blockBatch(address[] calldata addrs, string calldata reason) external onlyAdmin { for (uint i = 0; i < addrs.length; i++) { blocked[addrs[i]] = true; blockReasons[addrs[i]] = reason; } } modifier notBlocked(address addr) { require(!blocked[addr], string.concat("Address blocked: ", blockReasons[addr])); _; } } // Використання в протоколі contract Protocol is AddressBlocklist { function deposit(uint256 amount) external notBlocked(msg.sender) { // логіка депозиту } } 

Off-chain блокліст (для бірж та сервісів)

Для високонавантажених систем — Redis Bloom Filter для швидкої перевірки належності адреси до blocklist. Bloom filter знижує latency у 5 разів порівняно з повним скануванням бази.

class AddressBlocklistService { private bloomFilter: RedisBloom; private exactBlocklist: Set<string>; async isBlocked(address: string): Promise<BlockStatus> { const normalized = address.toLowerCase(); // Bloom filter: false позитиви можливі, false негативи — ні if (!await this.bloomFilter.exists(normalized)) { return { blocked: false }; // швидка відповідь: точно не в blocklist } // Exact check для підтвердження (bloom filter міг дати false positive) const exactMatch = await this.db.findBlockedAddress(normalized); if (!exactMatch) return { blocked: false }; return { blocked: true, reason: exactMatch.reason, source: exactMatch.source, addedAt: exactMatch.addedAt, }; } async updateFromSanctionsList(): Promise<void> { // OFAC SDN список (оновлюється кілька разів на тиждень) const ofacAddresses = await fetchOFACCryptoAddresses(); // Chainalysis Sanctioned Addresses список const chainalysisAddresses = await this.chainalysis.getSanctionedAddresses(); const allNew = [...ofacAddresses, ...chainalysisAddresses]; for (const addr of allNew) { await this.bloomFilter.add(addr.address.toLowerCase()); await this.db.upsertBlockedAddress({ address: addr.address.toLowerCase(), reason: addr.reason, source: addr.source, }); } } } 
Деталі реалізації Bloom filter Ми використовуємо RedisBloom з конфігурацією, оптимізованою під очікувану кількість адрес (до 1 млн) та бажаний false positive rate (0.01%). Це дозволяє тримати пам'ять в межах 2 MB.

Як впровадити систему: покроковий план для вашого проекту

  1. Аналіз архітектури — визначаємо ваші сценарії (DeFi, CEX, NFT) і вибираємо підхід: on-chain, off-chain або гібрид. Оцінюємо поточне навантаження: середній RPS, кількість активних користувачів.
  2. Вибір джерел блоклісту — підключаємо OFAC SDN, EU Sanctions, платні API (Chainalysis, Elliptic) або community-списки. Налаштовуємо автоматичне оновлення з інтервалом від 5 хвилин до 1 години.
  3. Розробка смарт-контрактів — реалізуємо AddressBlocklist з модифікаторами та batch-операціями. Інтегруємо multisig для управління. Gas-оптимізація: використовуємо mapping та event-driven логіку.
  4. Створення off-chain сервісу — розгортаємо Redis з Bloom filter, налаштовуємо чергу RabbitMQ для real-time оновлень. Обробляємо up to 10 000 rps з latency <5 ms.
  5. Тестування та аудит — покриваємо unit-тестами (Foundry/Hardhat), використовуємо Slither для статичного аналізу, проводимо fuzzing на Echidna. Перевіряємо хибні спрацювання на історичних даних за 6 місяців.
  6. Деплой та моніторинг — розгортаємо на mainnet/testnet з багатофазним запуском. Підключаємо Tenderly для відстеження gas та TPS. Налаштовуємо алерти при масових блокуваннях.

Що входить в роботу

  • Архітектура: проектування on-chain/off-chain компонентів з урахуванням ваших сценаріїв (DeFi, CEX, NFT).
  • Реалізація: смарт-контракти (Solidity), серверна частина (TypeScript, Redis), інтеграція з джерелами.
  • Документація: API-схеми, інструкції з розгортання, посібник адміністратора.
  • Навчання: коротка сесія для команди з експлуатації та вирішення інцидентів.
  • Підтримка: 2 тижні пост-релізного супроводу, виправлення помилок.

Орієнтовні терміни розробки — від 2 до 3 тижнів. Вартість розраховується індивідуально на основі обсягу інтеграцій та SLA.

Замовте розробку системи захисту вашого протоколу вже сьогодні. Отримайте консультацію з впровадження — наші інженери з 6-річним досвідом у Web3 допоможуть підібрати оптимальне рішення для вашого проекту.