---
title: "猎杀猎人：如何找出空投猎人"
description: "了解如何在 Hop Exchange 空投之前，借助 Alchemy 的 Issac Lau 和 Trace API，在 Hop Exchange 的 Airdrop Hunter Bounty 活动中找出发起 sybil 攻击的空投猎人。"
---

# 猎杀猎人：如何找出空投猎人

历史上，协议和区块链网络都通过承诺在产品达到市场契合后发放代币来吸引用户和流动性。这些代币代表两种主要激励：

1. 治理产品发展方向的能力
1. 货币分配

对 web2 最常见的批评之一是，用户对他们所贡献和参与的网络及应用没有所有权。

Web3 提供了一种基于社区的替代所有权模式，代币是这一新范式的关键组成部分。

鉴于社区导向思维方式在代币分配中的重要性，web3 项目致力于确保将代币空投（即分发）给对产品成功有切身利益的活跃社区参与者。

关于谁算作"活跃社区成员"，目前存在有效且活跃的争论，但有一方客观上是不良行为者——从事女巫攻击的用户和机器人。

## 什么是女巫攻击？
女巫攻击使用单个网络节点在对等\(P2P\)网络中操作多个虚假身份，通常是同时进行的。

女巫攻击会导致少数网络参与者获得不当的影响力份额，在空投场景下，这意味着获得更大份额的治理代币。

就空投猎人而言，这意味着以不真实的方式与协议和合约进行交互。

## Hop exchange 的空投猎人应对策略
尽管过去的许多空投都未能真正打击不良行为者，Hop Exchange 引入了一种新机制，借助社区成员的力量来减少女巫攻击的影响：

<CalloutBlock>

_"我们正在接收关于尚未被发现的女巫地址的举报。当 _[_Hop DAO_](https://hop.mirror.xyz/AI5fOUR0X_l0mktShDOx3mwr-hsB24gp8GvTWtS-MBc)_ 上线后，我们将提出一项提案，用被节省下来的代币中的 25% 奖励举报女巫地址的人——这部分代币将被锁定 1 年。举报将按先到先得的原则进行审核和计算奖励。"_

</CalloutBlock>

作为首批奖励"猎杀空投猎人"的社区倡议之一，Hop 释放了 web3 开发者社区的全部力量，也包括我自己。

让我们深入了解一下[我对 Hop DAO 去中心化](https://github.com/hop-protocol/hop-airdrop/issues/377)工作的贡献。

### 发现空投猎人
以下是我识别出的属于某次女巫攻击的地址的图形化表示。

<ImageBlock
  src="https://media.alchemy.com/1704708401-sybil-attack-visualization.png"
  alt="Sybil 攻击可视化。"
  width={1409}
  height={1373}
  caption="Sybil 攻击可视化。"
/>

**以下是如何解读这张女巫攻击可视化图：**

图中每个地址都是一个节点，所有显示的地址都通过链上转账相互连接，每条边代表一次转账。

该女巫攻击者表现出两种不同的模式，蓝色边表示**模式一**，绿色边表示**模式二**。

橙色节点表示在所有发生转账的女巫账户之间起链上连接作用的地址，由于偏离了本报告中概述的两种主要模式，这些地址也被纳入举报地址集合。

#### 模式 \#1
所有由蓝色边连接的地址都使用 Hop Exchange 在 Gnosis Chain（原 xDai）和 Polygon 之间来回"乒乓"转账。

每个地址都明显特征性地进行了以约 1000 美元 $USDC 计价的 Hop 交易（其中 1 笔以 $USDT 计价），各笔交易金额上下浮动约 250 美元，依次从一条链切换到另一条链再切换回来。

此外，每个地址内的每批交易都发生在非常短的时间跨度内（约 1-3 小时）。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Date", dataType: "object" },
      { key: "2", width: 200, title: "Source", dataType: "object" },
      { key: "3", width: 200, title: "Destination", dataType: "object" },
      { key: "4", width: 200, title: "Transfer ID", dataType: "object" },
      { key: "5", width: 200, title: "Transfer Tx", dataType: "object" },
      { key: "6", width: 200, title: "Token", dataType: "object" },
      { key: "7", width: 200, title: "Amount", dataType: "object" },
      { key: "8", width: 200, title: "Amount USD", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>7 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xc2f05f...e38d7f</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x0d641e...ef4d42</p>", tooltip: "", icon: "" },
        "6": { title: "<p>USDC</p>", tooltip: "", icon: "" },
        "7": { title: "<p>695.2042</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$695.472</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>7 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x9d6c1c...bc8403</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0xcc434d...eea07c</p>", tooltip: "", icon: "" },
        "6": { title: "<p>USDC</p>", tooltip: "", icon: "" },
        "7": { title: "<p>697.0148</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$697.284</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>7 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x5bcd1a...53ec67</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x7664cf...052e68</p>", tooltip: "", icon: "" },
        "6": { title: "<p>USDC</p>", tooltip: "", icon: "" },
        "7": { title: "<p>698.8394</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$699.109</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>7 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xe2e215...724de6</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0xdf5036...189bc4</p>", tooltip: "", icon: "" },
        "6": { title: "<p>USDC</p>", tooltip: "", icon: "" },
        "7": { title: "<p>700.6709</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$700.941</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>7 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x59b08c...9c0e37</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x97aed4...01b3d7</p>", tooltip: "", icon: "" },
        "6": { title: "<p>USDC</p>", tooltip: "", icon: "" },
        "7": { title: "<p>702.5039</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$702.775</p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>7 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xee2783...7c9c22</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0xca1dcc...196bd3</p>", tooltip: "", icon: "" },
        "6": { title: "<p>USDC</p>", tooltip: "", icon: "" },
        "7": { title: "<p>704.3302</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$704.602</p>", tooltip: "", icon: "" },
        id: 5,
      },
      {
        "1": { title: "<p>7 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x1dd1ec...a9d0a4</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x526463...9b34b2</p>", tooltip: "", icon: "" },
        "6": { title: "<p>USDC</p>", tooltip: "", icon: "" },
        "7": { title: "<p>707.0044</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$707.277</p>", tooltip: "", icon: "" },
        id: 6,
      },
    ],
  }}
/>

**以下是这一行为的示例：**

[https://explorer.hop.exchange/?account=0x4bc25a712b87c1e4a42df9ffac3662fe467b7e9a](https://explorer.hop.exchange/?account=0x4bc25a712b87c1e4a42df9ffac3662fe467b7e9a)

#### 模式 \#1 是如何被发现的？
模式 \#1 是通过使用 Alchemy Transfers API 追踪链上 Ethereum 转账发现的。经调查，一组相关地址（即模式 \#2）通过追踪 Avalanche 主网上枢纽地址\(0xb23691043293de4deeae3b565bd33bc059f264eb\)与其关联支线地址之间的转账，被发现与模式 \#1 相连。

#### 模式 \#2
对于由绿色边连接的地址，攻击地址在数小时内多次使用 Hop Exchange，反复进行主要从 Gnosis Chain（原 xDai）到 Polygon 的兑换交易。

所有交易通常使用 200-300 美元的 $DAI、$USDC 或 $USDT。

总体来看，模式 2 发生在 2022 年 1 月 15 日至 1 月 24 日这一周的时间跨度内。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 150, title: "Date", dataType: "object" },
      { key: "2", width: 150, title: "Source", dataType: "object" },
      { key: "3", width: 150, title: "Destination", dataType: "object" },
      { key: "4", width: 180, title: "Transfer ID", dataType: "object" },
      { key: "5", width: 180, title: "Transfer Tx", dataType: "object" },
      { key: "6", width: 120, title: "Token", dataType: "object" },
      { key: "7", width: 150, title: "Amount", dataType: "object" },
      { key: "8", width: 150, title: "Amount USD", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xff8fdd...3425e0</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0xd0620e...65a5d7</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>151.7367</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$152.328</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x2b7b50...244c1f</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x74af1a...349d7d</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>187.0714</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$187.8</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x72de10...8aed0a</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x38b797...743d8f</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>223.8656</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$224.738</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xffd955...6f9db2</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0xcb643f...26366a</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>275.6120</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$276.686</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x2cef20...07e90d</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x6459e5...3eb30b</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>215.9183</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$216.76</p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xfc36c5...6191cc</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0xdd9488...7a4c49</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>170.2939</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$170.807</p>", tooltip: "", icon: "" },
        id: 5,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xf4314e...f06488</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x1ed8f3...b8d68e</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>254.4636</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$255.229</p>", tooltip: "", icon: "" },
        id: 6,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xd41505...d09c9c</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0xefc5e9...b37607</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>218.8310</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$219.49</p>", tooltip: "", icon: "" },
        id: 7,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0x674400...b0a772</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x25c9b8...83d62a</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>225.7740</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$226.454</p>", tooltip: "", icon: "" },
        id: 8,
      },
      {
        "1": { title: "<p>4 months ago</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Gnosis</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Polygon</p>", tooltip: "", icon: "" },
        "4": { title: "<p>0xf1f178...8306f5</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0x866775...30dd94</p>", tooltip: "", icon: "" },
        "6": { title: "<p>DAI</p>", tooltip: "", icon: "" },
        "7": { title: "<p>201.0280</p>", tooltip: "", icon: "" },
        "8": { title: "<p>$201.633</p>", tooltip: "", icon: "" },
        id: 9,
      },
    ],
  }}
/>

**以下是这一行为的示例：**

[https://explorer.hop.exchange/?account=0x1cccff3de9b0a7c466acb31f33910691f1cb6e14](https://explorer.hop.exchange/?account=0x1cccff3de9b0a7c466acb31f33910691f1cb6e14)

### 将模式 \#1 与模式 \#2 关联起来
经发现，模式 \#1 和模式 \#2 之所以相关联，是因为该女巫攻击者在 [Ethereum 主网](https://www.alchemy.com/rpc/ethereum)和 Avalanche 主网上存在重叠交易。

具体而言，这些地址之间的转账同时发生在两条网络上，表明两种模式之间存在关联。

- 0x1100cc….d34e76a8e ←→ 0xb2369….59f264eb
- 0xb23691….f264eb ←→ 0x80d….19b9

要从超过 [30,000 个地址](https://github.com/hop-protocol/hop-airdrop/blob/master/src/data/finalDistribution.csv)中筛查出这些关联，难度不小，但 [Transfers API](https://www.alchemy.com/enhanced-apis/?a=566c1048c9) 能够有效地追踪 Ethereum 上的交易。

## 如何发现空投猎人
通过搜索所有符合条件地址在 Ethereum 和 Avalanche 主网上的转账记录，我们能够追踪共同的链上活动，从而发现相关联的地址。

为了减少发现符合条件地址所需的暴力计算量，我们通过剔除共享地址数量较少的集群来缩小集群搜索范围。

在过滤掉不太可能的地址后，我们对 Hop Exchange 在其支持的各条区块链上的子图进行查询，以生成每个地址集群的基本画像。

如果某个集群画像表现出重复的地址行为，就会被标记为需要人工核实。

### 我要如何猎杀空投猎人？
借助一个[免费的 Alchemy 账户](https://alchemy.com/?a=566c1048c9)、Etherscan API 密钥、子图访问权限以及一些基础的 Python 脚本，你也可以成为猎杀空投猎人的猎人。

如果你有发现空投猎人的好方法，对加密研究感兴趣，或者想聊聊 web3 项目，欢迎在 Twitter 上联系我\([@crypt0zeke](https://twitter.com/crypt0zeke)\)。

在此之前，请留意新的社区倡议，我们下次狩猎再见！
