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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка системи блокування підозрілих адрес
Середній
~3-5 днів
Часті запитання

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

Етапи блокчейн-розробки

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1306
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1218
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    920
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1147
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    610
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    885

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

Система блокування підозрілих адрес — перший рівень захисту від відмивання грошей. Її завдання: перешкодити взаємодії з відомими поганими акторами перед тим, як транзакція потрапить до протоколу або біржі. Для DeFi протоколів це також зменшує нормативні ризики в юрисдикціях, де регулятори починають звертати увагу на off-chain compliance.

Архітектура системи блокування

On-chain blocklist (для смарт-контрактів)

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 blocklist (для бірж та сервісів)

Для високонавантажених систем — Redis Bloom Filter для швидкої перевірки приналежності адреси до blocklist:

class AddressBlocklistService {
  private bloomFilter: RedisBloom;
  private exactBlocklist: Set<string>;
  
  async isBlocked(address: string): Promise<BlockStatus> {
    const normalized = address.toLowerCase();
    
    // Bloom filter: хибні позитиви можливі, хибні негативи — ні
    if (!await this.bloomFilter.exists(normalized)) {
      return { blocked: false }; // швидка відповідь: точно не в blocklist
    }
    
    // Точна перевірка для підтвердження (bloom filter міг дати помилковий позитив)
    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,
      });
    }
  }
}

Джерела даних blocklist

Джерело Тип Оновлення Доступність
OFAC SDN List Санкції Кілька разів на тиждень Безплатно
EU Sanctions Санкції При змінах Безплатно
Chainalysis Sanctioned Санкції + darknet Real-time Платно
Elliptic Lens Darknet, шахрайство Real-time Платно
Community lists (GitHub) Шахраї, фішинг За внесками Безплатно

OFAC SDN список містить крипто адреси — їх потрібно парсити з XML файлу (SDN_Advanced.xml). Chainalysis і Elliptic надають ширші списки через API.

Автоматичне оновлення

// 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} крипто адрес`);
}

Система блокування підозрілих адрес з on-chain та off-chain компонентами, автоматичним оновленням з OFAC та Chainalysis — 2-3 тижні розробки.