Blockchain

Анализ криптовалют и on-chain-рисков

On-chain-аналитика полезна не только трейдерам. Для банков, финтехов, фондов и команд комплаенса это инструмент оценки контрагентов, выявления паттернов и контроля источников риска в крипто-контуре. Ниже — как устроен анализ публичных сетей, на чём держится риск-скоринг кошелька, где AML-эвристики ломаются и как встроить всё это в процесс без иллюзии «стопроцентного выявления».

Что вообще даёт on-chain-анализ

Публичные блокчейны — Bitcoin, Ethereum, TRON и совместимые сети112 — устроены так, что каждая подтверждённая транзакция навсегда записана в открытый реестр. Это ключевое отличие от классической банковской аналитики: не нужно запрашивать выписку у контрагента, история переводов уже доступна и проверяема кем угодно. On-chain-анализ превращает этот поток записей в структуру: кто кому платил, какими суммами, через какие промежуточные адреса и насколько близко находится кошелёк к уже известным рисковым сущностям.

Важно сразу зафиксировать границу. Прозрачность здесь — про псевдонимность23, а не про анонимность и не про раскрытие личности. В реестре видны адреса и потоки, но не имена. Связь «адрес → реальный субъект» появляется только из дополнительных источников: меток бирж, публичных раскрытий, данных KYC, открытых расследований. Поэтому on-chain-картина — это сильная, но неполная половина анализа.

Отслеживание потоков

Базовая операция — проследить движение средств от адреса к адресу. В сетях с моделью UTXO (Bitcoin) транзакция тратит конкретные «непотраченные выходы» и создаёт новые; в account-based-сетях (Ethereum, TRON) меняется баланс счёта и фиксируются вызовы контрактов. И там, и там можно строить граф: вершины — адреса, рёбра — переводы6 с суммой и временем. На этом графе видно концентрацию потока, транзитные узлы и точки входа/выхода в фиатный контур через биржи.

биржа · хаб млн миксер санкц. адрес A B C цель целевой кошелёк 1 хоп 2 хопа 3 хопа
Рис. 1. Граф транзакций. Вершины — адреса, рёбра — переводы. Риск оценивают по близости (числу «хопов») целевого кошелька к помеченным узлам: миксеру или санкционному адресу. Узким местом оказываются хабы — биржи, через которые проходят миллионы непричастных пользователей: формальная близость к рисковому узлу через биржу часто оказывается ложным сигналом. Схема, не данные.

Кластеризация адресов и её пределы

Один субъект почти никогда не пользуется одним адресом. Чтобы собрать кошельки в кластер, в UTXO-сетях применяют эвристику common-input-ownership45: если несколько входов потрачены в одной транзакции, предполагается, что приватными ключами от них распоряжается один владелец — иначе он не смог бы подписать их вместе. Эвристика рабочая и лежит в основе большинства промышленных систем, но это именно предположение, а не доказательство. Её ломают:

  • CoinJoin и другие коллаборативные транзакции, где несколько независимых участников намеренно объединяют входы — общий вход больше не означает общего владельца.
  • Кошельки бирж и кастодианов78, где входы тысяч клиентов сводятся в одну транзакцию; наивная кластеризация склеит их в один гигантский ложный кластер.
  • Изменение change-адресов и сложные схемы консолидации, которые искажают границы кластера в обе стороны.

В account-based-сетях common-input-ownership неприменима в исходном виде: там нет множественных входов. Кластеризация опирается на другие признаки — паттерны депозитных адресов, поведение контрактов, повторяющиеся газовые источники, — и ещё сильнее зависит от качества внешних меток. Практический вывод один: кластер — это гипотеза с вероятностью ошибки, а не факт, и обращаться с ним нужно соответственно.

10⁰ 10¹ 10² 10³ 10⁴ 10⁵ 10⁶ 10⁷ 10⁰ 10¹ 10² 10³ хабы: биржи, миксеры Степень узла k (число связей), log Число адресов, log адреса k⁻²·¹
Рис. 2. Степенное распределение степеней узлов. Граф транзакций — безмасштабная сеть: у подавляющего большинства адресов мало связей, но немногие хабы (биржи, миксеры) имеют их десятки и сотни тысяч. На лог-логарифмических осях это прямая (показатель ≈ −2.1). Поэтому наивная кластеризация склеивает биржевые хабы в гигантские ложные кластеры. Синтетические данные · для наглядности.

Связь с известными сущностями

Сам по себе граф потоков мало что говорит, пока к нему не привязаны метки. Ценность появляется, когда адрес связывается с распознанной сущностью: горячим кошельком биржи, сервисом-миксером, известным мошенническим адресом из открытых расследований или адресом под санкциями (например, из публичных списков OFAC SDN11). Близость кошелька к таким узлам по графу — один из самых информативных признаков. Качество всей системы напрямую упирается в качество и актуальность этих справочников: устаревшая или ошибочная метка отравляет скоринг для всех адресов вокруг неё.

Главное: on-chain-анализ даёт проверяемую структуру потоков и связей, но любой вывод о «владельце», «кластере» или «риске» — это вероятностная гипотеза, опирающаяся на эвристики и внешние метки. Точность системы ограничена точностью этих допущений, а не математикой графа.

Риск-скоринг кошелька

Риск-скоринг отвечает на прикладной вопрос: насколько подозрителен конкретный адрес или транзакция. Это не ярлык «чистый / грязный», а оценка вероятности, собранная из нескольких групп признаков:

  • История транзакций. Возраст адреса, число и объём операций, регулярность, доля входящих и исходящих потоков.
  • Контрагенты. С кем адрес взаимодействовал напрямую и какая доля оборота приходится на помеченные рисковые сущности.
  • Близость к рисковым адресам по графу. На каком расстоянии (в числе переводов — «хопов») находятся миксеры, санкционные или мошеннические узлы, и какая доля средств прослеживается до них.
  • Поведенческие паттерны. Структура сумм, временные всплески, типичные для автоматизированного «дробления» переводы, признаки транзитных схем.

Принципиальный момент, который стоит проговаривать с заказчиком отдельно: высокий скоринг — это повод для проверки, а не приговор. Ложные срабатывания неизбежны. Адрес может получить высокий балл из-за одного перевода от контрагента, который сам оказался скомпрометирован, или из-за близости к рисковому узлу через биржу, через которую проходят миллионы непричастных пользователей. Поэтому скоринг должен сопровождаться объяснением: какие именно признаки подняли балл — иначе комплаенс не сможет принять обоснованное решение, а клиент получит блокировку без причины.

0 0.25 0.5 0.75 1 порог ложные срабатывания пропуски Риск-скоринг адреса Плотность легитимные нелегитимные
Рис. 3. Распределения риск-скоров. Легитимные и нелегитимные адреса перекрываются, поэтому любой порог даёт и ложные срабатывания (легитимные выше порога), и пропуски (нелегитимные ниже). Снижение порога ловит больше нарушителей ценой роста ложных тревог — поэтому порог калибруют по доле ложных срабатываний, а высокий скоринг — повод для проверки, а не приговор. Синтетические данные · для наглядности.

AML-эвристики и где они ломаются

Трассировка потоков работает, пока цепочка переводов остаётся связной. Существует целый класс инструментов, который эту связность намеренно разрывает, и относиться к ним нужно трезво — не как к «непробиваемой стене», но и не как к мелкому препятствию.

  • Миксеры и CoinJoin.9 Объединяют средства многих участников и перемешивают выходы так, что однозначное соответствие «вход → выход» теряется. После качественного микширования трассировка переходит из точной в вероятностную, а часто становится практически бесполезной на уровне отдельной монеты.
  • Cross-chain bridges. Перевод актива из одной сети в другую рвёт единый граф: средства «исчезают» в одном блокчейне и «появляются» в другом. Без сопоставления событий по обе стороны моста цепочка обрывается.
  • Privacy-coins. Сети вроде Monero по дизайну скрывают суммы, отправителей и получателей. Классический on-chain-анализ к ним почти неприменим — там нет открытого графа потоков, который можно обойти.

Отсюда главный методологический вывод: on-chain-сигналов недостаточно. Там, где трассировка обрывается, её нужно достраивать off-chain-контуром — данными KYC, IP- и устройствами, бизнес-контекстом операции, информацией от бирж по запросу. On-chain отвечает на вопрос «куда пошли средства», off-chain — «кто за этим стоит и зачем». Сильная система соединяет оба, а не подменяет один другим.

Сигналы и их ограничения

Чтобы скоринг был честным, рядом с каждым сигналом полезно держать его ограничение. Ниже — компактная сводка типичных признаков (значения порогов условны и зависят от сети, профиля сервиса и риск-аппетита).

Сигнал Что означает Ограничение
Прямой перевод от/к миксеру Попытка разорвать трассировку источника средств Использование микширования само по себе не доказывает незаконность
Близость к санкционному адресу (1–2 хопа) Высокий риск контакта с подсанкционной сущностью Промежуточный узел может быть биржей с миллионами непричастных клиентов
Общий вход в UTXO-транзакции Гипотеза об общем владельце адресов (кластер) Ломается на CoinJoin и кошельках бирж — возможен ложный кластер
Дробление сумм, «структурирование» Паттерн, типичный для обхода порогов мониторинга Та же структура встречается в легитимных пакетных выплатах
Молодой адрес с крупным разовым оборотом Возможный транзитный или одноразовый кошелёк Так же выглядят новые кошельки легальных пользователей и сервисов
Вывод через cross-chain bridge Перемещение средств между сетями, обрыв графа Мосты — штатный инструмент; нужен off-chain-контекст для оценки

Как это встраивается в комплаенс-процесс

On-chain-аналитика приносит пользу, когда становится частью процесса, а не разовой выгрузкой. Рабочая конфигурация обычно включает несколько слоёв.

1. Нормализация источников

Сводим on-chain- и off-chain-контур: транзакции сетей, справочники меток (биржи, миксеры, санкционные списки), внутренние данные клиента и события протоколов — к единой модели адресов и потоков.

2. Графовая аналитика и скоринг

Строим граф, считаем признаки близости к рисковым узлам и поведенческие метрики. Система обычно совмещает прозрачный слой правил (rule-based) и ML-слой: правила дают объяснимость и аудиторский след, модель помогает ловить нетривиальные комбинации10.

3. Пороги, алерты и эскалация

Скоринг превращается в действие через пороги. Низкий риск — проходит автоматически; средний — попадает в очередь на ручной разбор; высокий — уходит на эскалацию с приостановкой операции до решения. Пороги настраиваются под риск-аппетит и калибруются по доле ложных срабатываний — иначе аналитики тонут в шуме, а реальные сигналы теряются.

4. Мониторинг и пересмотр

Риск адреса меняется во времени: чистый сегодня кошелёк завтра может получить перевод от скомпрометированного контрагента. Поэтому скоринг пересчитывается, а решения и их основания документируются — это и аудиторский след, и материал для калибровки модели.

Минимальный пример: история адреса и простой скоринг

Ниже — наглядный псевдокод на Python. Он показывает логику, а не готовый продукт: обращение к API эксплорера (синтаксис эндпоинтов приведён в стиле Etherscan-подобных сервисов и требует уточнения по актуальной документации провайдера), построение списка контрагентов и наивная метрика близости к множеству рисковых адресов. Значения весов и порога условны и приведены для примера.

import requests

# Множество помеченных рисковых адресов (из справочника: миксеры,
# санкционные списки, известные мошеннические кошельки).
RISKY = {"0xRISK1", "0xRISK2"}  # условные адреса для примера

def fetch_transfers(address, api_key):
    # Etherscan-подобный эндпоинт списка обычных транзакций адреса.
    # Точные имена параметров сверяйте с документацией провайдера.
    url = "https://api.etherscan.io/api"
    params = {
        "module": "account",
        "action": "txlist",
        "address": address,
        "sort": "asc",
        "apikey": api_key,
    }
    data = requests.get(url, params=params, timeout=30).json()
    return data.get("result", [])

def counterparties(address, transfers):
    # Все адреса, с которыми взаимодействовал кошелёк.
    peers = set()
    for tx in transfers:
        peers.add(tx["to"])
        peers.add(tx["from"])
    peers.discard(address.lower())
    return peers

def risk_score(address, api_key):
    # Наивный скоринг: доля прямых контрагентов из списка рисковых.
    # Это лишь признак первого уровня (1 хоп), а не полный анализ.
    transfers = fetch_transfers(address, api_key)
    peers = counterparties(address, transfers)
    if not peers:
        return {"score": 0.0, "reason": "нет транзакций"}

    risky_hits = peers & RISKY
    proximity = len(risky_hits) / len(peers)

    # Порог условный; калибруется по доле ложных срабатываний.
    flag = proximity > 0.0
    return {
        "score": round(proximity, 3),
        "risky_peers": sorted(risky_hits),
        "flag": flag,  # повод для проверки, не доказательство
    }

Даже на этом уровне видны ограничения метода. Метрика смотрит только на прямых контрагентов (1 хоп) и не учитывает близость через цепочки переводов; не различает биржевой узел и адрес конечного злоумышленника; полностью зависит от полноты множества RISKY. Продакшен-система добавляет обход графа на несколько хопов с затуханием веса по расстоянию, дедупликацию кластеров, учёт сумм и времени, а также объяснение каждого балла. Но усложнение модели не отменяет исходного принципа: это вероятностная оценка, которую проверяет человек.

Частые ошибки

  1. Считают объёмы и число транзакций, игнорируя структуру связей между адресами.
  2. Принимают кластер или метку за факт, не закладывая вероятность ошибки.
  3. Не документируют логику скоринга — и теряют доверие комплаенса и аудиторский след.
  4. Опираются только на on-chain там, где трассировка уже оборвана миксером или мостом.
  5. Не связывают сигналы с бизнес-контекстом клиента и тонут в ложных срабатываниях.

Что важно для заказчика

Клиенту нужен не поток сырых событий, а система, отвечающая на вопросы: где риск, насколько он значим, как его обосновать и что делать дальше. Поэтому корректный on-chain-проект заканчивается понятной структурой решений и зафиксированными ограничениями метода, а не выгрузкой адресов. Мы не обещаем «стопроцентного выявления» — честная цель состоит в том, чтобы поднять качество сигналов и сделать решения воспроизводимыми и объяснимыми.

Если такая задача актуальна, посмотрите профильную страницу по on-chain-проверке и крипто-рискам и подход к валидации моделей и расчётов. Когда риск-контур нужно увязать с финансовой стороной — стресс-тестами, метриками портфеля, отчётностью — это уже область финансовой аналитики.

Источники

Ключевые работы по on-chain-анализу и структуре крипто-сетей. Номера-сноски в тексте ссылаются на этот список.

  1. Nakamoto, S. (2008). Bitcoin: A Peer-to-Peer Electronic Cash System. bitcoin.org. — оригинальный whitepaper Bitcoin.
  2. Reid, F., & Harrigan, M. (2013). An Analysis of Anonymity in the Bitcoin System. In Security and Privacy in Social Networks (pp. 197–223). Springer. doi:10.1007/978-1-4614-4139-7_10. — псевдонимность и граф адресов/транзакций.
  3. Androulaki, E., Karame, G. O., Roeschlin, M., Scherer, T., & Capkun, S. (2013). Evaluating User Privacy in Bitcoin. In Financial Cryptography and Data Security (FC 2013), LNCS 7859 (pp. 34–51). Springer. doi:10.1007/978-3-642-39884-1_4. — эмпирическая оценка приватности пользователей.
  4. Meiklejohn, S., Pomarole, M., Jordan, G., Levchenko, K., McCoy, D., Voelker, G. M., & Savage, S. (2013). A Fistful of Bitcoins: Characterizing Payments Among Men with No Names. In IMC ’13 (pp. 127–139). ACM. doi:10.1145/2504730.2504747. — кластеризация адресов и эвристика общего входа.
  5. Harrigan, M., & Fretter, C. (2016). The Unreasonable Effectiveness of Address Clustering. In UIC/ATC/ScalCom 2016 (pp. 368–373). IEEE. doi:10.1109/UIC-ATC-ScalCom-CBDCom-IoP-SmartWorld.2016.0071. — почему кластеризация адресов так эффективна — и её пределы.
  6. Ron, D., & Shamir, A. (2013). Quantitative Analysis of the Full Bitcoin Transaction Graph. In FC 2013, LNCS 7859 (pp. 6–24). Springer. doi:10.1007/978-3-642-39884-1_2. — количественный анализ графа транзакций.
  7. Barabási, A.-L., & Albert, R. (1999). Emergence of Scaling in Random Networks. Science, 286(5439), 509–512. doi:10.1126/science.286.5439.509. — безмасштабные сети и степенное распределение (хабы).
  8. Kondor, D., Pósfai, M., Csabai, I., & Vattay, G. (2014). Do the Rich Get Richer? An Empirical Analysis of the Bitcoin Transaction Network. PLoS ONE, 9(2), e86197. doi:10.1371/journal.pone.0086197. — структура сети транзакций Bitcoin и преференциальное присоединение.
  9. Möser, M., Böhme, R., & Breuker, D. (2013). An inquiry into money laundering tools in the Bitcoin ecosystem. In 2013 APWG eCrime Researchers Summit (pp. 1–14). IEEE. doi:10.1109/eCRS.2013.6805780. — миксеры и инструменты отмывания в Bitcoin.
  10. Weber, M., Domeniconi, G., Chen, J., Weidele, D. K. I., Bellei, C., Robinson, T., & Leiserson, C. E. (2019). Anti-Money Laundering in Bitcoin: Experimenting with Graph Convolutional Networks for Financial Forensics. KDD ’19 Workshop on Anomaly Detection in Finance. arxiv.org. — графовые нейросети для AML (датасет Elliptic).
  11. Foley, S., Karlsen, J. R., & Putniņš, T. J. (2019). Sex, Drugs, and Bitcoin: How Much Illegal Activity Is Financed Through Cryptocurrencies? The Review of Financial Studies, 32(5), 1798–1853. doi:10.1093/rfs/hhz015. — эмпирическая оценка доли нелегальной активности.
  12. Conti, M., Sandeep Kumar, E., Lal, C., & Ruj, S. (2018). A Survey on Security and Privacy Issues of Bitcoin. IEEE Communications Surveys & Tutorials, 20(4), 3416–3452. doi:10.1109/COMST.2018.2842460. — обзор безопасности и приватности Bitcoin.

Нужна модель, а не статья?

Опишите задачу.
Ответим в течение 24 часов.

Мы не только пишем о методах — мы строим модели для бизнеса, фондов и исследователей.

NDA до передачи данных · границы работ, KPI и сроки фиксируются до старта · hello@statgazer.ru