lucifer

在 Web3 的去中心化金融(DeFi)世界中,“鲸鱼”(即大庄家)凭借巨额资金的交易行为,常常能掀起市场波澜。他们的挂单——无论是已成交的订单还是尚未执行的限价订单——都可能隐藏着市场意图的线索。得益于区块链的透明性,我们可以通过链上数据和专业工具,窥探这些鲸鱼的动向。本文将以循序渐进的方式,带你从零开始探索如何在 Web3 环境中查看鲸鱼的挂单数据,重点使用 Python3 代码展示实现原理,并结合以太坊和 Solana 生态的实际案例,力求清晰、实用。

已成交订单与未成交挂单

在 Web3 中,挂单分为两类:已成交的订单未成交的挂单。已成交的订单记录在区块链上,可通过区块链浏览器直接查询;未成交的挂单则可能存储在去中心化交易所(DEX)的订单簿中(如 dYdX、Serum)或以太坊的内存池(Mempool)中,等待确认。鲸鱼的挂单通常表现为大额资金的买卖订单或流动性操作,可能影响价格走势或市场深度。

为什么需要查看鲸鱼挂单?

鲸鱼的挂单数据能揭示他们的交易策略,例如:

  • 价格支撑或压制:大额买单/卖单可能形成“支撑墙”或“阻力墙”。
  • 市场操纵:通过虚假挂单(如“假墙”)吸引散户或诱导价格波动。
  • 流动性操作:在 AMM(如 Uniswap V3)中添加/移除大额流动性,影响交易滑点。

通过链上分析工具和代码,我们可以追踪这些行为,提前捕捉市场信号。


从区块链浏览器入手,查看已成交挂单

原理与过程

区块链的透明性让已成交的订单无处遁形。鲸鱼的交易记录存储在区块链上,无论是转账、代币交换(swap),还是向 DEX 流动性池添加资金,都可以通过区块链浏览器查询。我们以以太坊为例,使用 Etherscan 的 API 和 Python3,提取某个地址的交易历史,筛选出大额订单,推测鲸鱼的挂单行为。

步骤

  1. 获取鲸鱼钱包地址(可通过 X 平台或 Nansen 等工具发现)。
  2. 使用 Etherscan API 查询该地址的交易记录。
  3. 筛选金额超过一定阈值的交易(如 10 ETH 或等值代币)。
  4. 分析交易类型(转账、swap、流动性操作)。

Python 实现

以下代码展示如何通过 Etherscan API 获取某个地址的交易记录,并筛选大额交易:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import requests
import time

# 配置 Etherscan API 密钥和目标地址
API_KEY = "YOUR_ETHERSCAN_API_KEY" # 替换为你的 Etherscan API 密钥
WALLET_ADDRESS = "0x742d35Cc6634C0532925a3b844Bc454e4438f44e" # 示例鲸鱼地址
ETHERSCAN_API = "https://api.etherscan.io/api"

def get_transactions(address, api_key, min_value_eth=10):
params = {
"module": "account",
"action": "txlist",
"address": address,
"startblock": 0,
"endblock": 99999999,
"sort": "desc",
"apikey": api_key
}
response = requests.get(ETHERSCAN_API, params=params)
data = response.json()

if data["status"] != "1":
print(f"API Error: {data['message']}")
return []

# 筛选大额交易(以 ETH 计)
large_txs = []
for tx in data["result"]:
value_eth = int(tx["value"]) / 10**18 # 转换为 ETH
if value_eth >= min_value_eth:
large_txs.append({
"hash": tx["hash"],
"value_eth": value_eth,
"to": tx["to"],
"timestamp": time.ctime(int(tx["timeStamp"]))
})
return large_txs

# 执行查询
transactions = get_transactions(WALLET_ADDRESS, API_KEY)
for tx in transactions:
print(f"Tx Hash: {tx['hash']}, Value: {tx['value_eth']} ETH, To: {tx['to']}, Time: {tx['timestamp']}")

代码说明

  • 使用 requests 库调用 Etherscan API,查询目标地址的交易历史。
  • 筛选金额大于 10 ETH 的交易(可调整阈值)。
  • 输出交易哈希、金额、目标地址和时间戳,方便进一步分析。

注意

  • 你需要注册 Etherscan 并获取免费 API 密钥。
  • 对于代币交易,可修改代码查询 tokentx 接口(需调整 action 参数)。
  • 鲸鱼地址可通过社区(如 X 上的 @Whale_Alert)或 Nansen 获得。

深入 Mempool,捕捉未成交挂单

原理与过程

未成交的挂单可能以待处理交易的形式出现在区块链的内存池(Mempool)中。以太坊的 Mempool 包含尚未确认的交易,可能包括鲸鱼提交的限价订单或大额转账。通过实时监控 Mempool,我们可以捕捉这些未成交的挂单,推测鲸鱼的意图。

步骤

  1. 连接以太坊 WebSocket 节点(如 Infura、Alchemy)。
  2. 使用 ethers.py 监听 Mempool 中的待处理交易。
  3. 筛选大额交易(例如价值超过 10 ETH)。
  4. 分析交易的目标合约(如 Uniswap 路由器),判断是否为挂单。

Python 实现

以下代码展示如何使用 web3.py 监控以太坊 Mempool 中的大额待处理交易:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from web3 import Web3
import asyncio
import time

# 配置 Web3 提供者
WEB3_WS_URL = "wss://mainnet.infura.io/ws/v3/YOUR_INFURA_PROJECT_ID" # 替换为你的 Infura WebSocket URL
w3 = Web3(Web3.WebsocketProvider(WEB3_WS_URL))

async def monitor_mempool(min_value_eth=10):
print("Starting Mempool monitor...")
while True:
try:
# 获取待处理交易
pending_block = w3.eth.get_block('pending', full_transactions=True)
for tx in pending_block["transactions"]:
value_eth = w3.from_wei(tx["value"], "ether")
if value_eth >= min_value_eth:
print(f"Large Pending Tx: Hash={tx['hash'].hex()}, Value={value_eth} ETH, To={tx['to']}")
except Exception as e:
print(f"Error: {e}")
await asyncio.sleep(1) # 每秒检查一次

# 运行异步监控
if __name__ == "__main__":
asyncio.run(monitor_mempool())

代码说明

  • 使用 web3.py 连接 Infura 的 WebSocket 节点,实时获取待处理区块的交易。
  • 筛选价值大于 10 ETH 的交易,输出交易哈希、金额和目标地址。
  • 可扩展代码,分析 to 地址是否为 DEX 合约(如 Uniswap 的 Router)。
  • 需要 Infura 或 Alchemy 的 WebSocket URL(免费或付费订阅)。

注意

  • Mempool 数据变化快,需高性能节点支持。
  • 鲸鱼可能使用高 Gas 费用优先确认交易,需关注 Gas Price。

探索订单簿型 DEX 的未成交挂单

原理与过程

在订单簿型 DEX(如 Solana 上的 Serum),未成交的限价订单直接存储在链上或链下订单簿中,公开可查。鲸鱼的挂单可能表现为集中在某一价格区间的大额买单或卖单。我们以 Serum 为例,使用 Python 和 @solana/web3.py 查询订单簿,提取大额挂单。

步骤

  1. 获取 Serum 市场的地址(通过 Serum 文档或 Solscan)。
  2. 使用 @solana/web3.py@project-serum/serum 库加载市场数据。
  3. 查询买单(Bids)和卖单(Asks),筛选大额订单。
  4. 分析订单的账户地址,判断是否为鲸鱼。

Python 实现

以下代码展示如何查询 Serum 市场的订单簿:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from solana.rpc.async_api import AsyncClient
from serum.market import Market
import asyncio

# 配置 Solana 节点和 Serum 市场地址
SOLANA_RPC = "https://api.mainnet-beta.solana.com"
MARKET_ADDRESS = "9wFFyRfZB1P2V3Ab8DwNwg3Vv9NmnfK1h3ScAqaMpfg" # 示例 Serum 市场地址
PROGRAM_ID = "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" # Serum 程序 ID

async def get_orderbook():
async with AsyncClient(SOLANA_RPC) as client:
market = await Market.load(client, MARKET_ADDRESS, PROGRAM_ID)
bids = await market.load_bids(client)
asks = await market.load_asks(client)

print("Large Buy Orders (Bids):")
for order in bids:
if order.size > 1000: # 筛选大额订单(例如 >1000 单位)
print(f"Price: {order.price}, Size: {order.size}, Owner: {order.owner}")

print("\nLarge Sell Orders (Asks):")
for order in asks:
if order.size > 1000:
print(f"Price: {order.price}, Size: {order.size}, Owner: {order.owner}")

# 运行查询
if __name__ == "__main__":
asyncio.run(get_orderbook())

代码说明

  • 使用 @solana/web3.py@project-serum/serum 加载 Serum 市场数据。
  • 查询买单和卖单,筛选数量大于 1000 的订单(可调整阈值)。
  • 输出订单价格、数量和持有者地址,供进一步分析。
  • 需要安装 solana-pypy-serum 库(pip install solana py-serum)。

注意

  • Serum 市场地址需通过 Solscan 或 Serum 文档获取。
  • 鲸鱼可能使用多个账户分散挂单,需结合 Nansen 等工具分析。

分析 AMM 型 DEX 的限价挂单

原理与过程

在 AMM 型 DEX(如 Uniswap V3),未成交挂单以限价订单(Range Orders)的形式存在,表现为用户在特定价格区间提供的流动性。鲸鱼可能在关键价格点设置大额流动性,影响市场。我们使用 The Graph 的 Subgraph API 查询 Uniswap V3 池子的流动性数据,筛选大额挂单。

步骤

  1. 获取 Uniswap V3 池子地址(通过 Etherscan 或 Uniswap 界面)。
  2. 使用 The Graph 的 Subgraph 查询池子的活跃头寸(Positions)。
  3. 筛选流动性大于某个阈值的头寸,推测鲸鱼挂单。
  4. 分析头寸的价格区间(tickLower 和 tickUpper)。

Python 实现

以下代码展示如何查询 Uniswap V3 池子的流动性头寸:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import requests

# 配置 Uniswap V3 Subgraph URL 和池子地址
SUBGRAPH_URL = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3"
POOL_ADDRESS = "0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8" # 示例池子地址(USDC/ETH)

def query_positions(pool_address, min_liquidity=10**18):
query = """
{
positions(where: {pool: "%s", liquidity_gt: %d}) {
id
owner
tickLower
tickUpper
liquidity
}
}
""" % (pool_address.lower(), min_liquidity)

response = requests.post(SUBGRAPH_URL, json={"query": query})
data = response.json()

if "errors" in data:
print(f"GraphQL Error: {data['errors']}")
return []

positions = data["data"]["positions"]
for pos in positions:
print(f"Position ID: {pos['id']}, Owner: {pos['owner']}, "
f"Tick Range: {pos['tickLower']} - {pos['tickUpper']}, Liquidity: {pos['liquidity']}")
return positions

# 执行查询
positions = query_positions(POOL_ADDRESS)

代码说明

  • 使用 requests 向 Uniswap V3 Subgraph 发送 GraphQL 查询。
  • 筛选流动性大于 10^18 的头寸(可调整阈值)。
  • 输出头寸的 ID、持有者地址、价格区间(tick)和流动性。
  • 池子地址可通过 Uniswap 界面或 Etherscan 获取。

注意

  • 需要熟悉 Uniswap V3 的 tick 机制,将 tick 转换为价格(可参考 Uniswap 文档)。
  • 鲸鱼可能在多个池子分散流动性,需监控多个交易对。

总结

通过区块链浏览器、Mempool 监控、订单簿查询和 AMM 流动性分析,我们可以全面追踪 Web3 中鲸鱼的挂单数据。Python 代码让这些过程变得可编程、可定制,适合不同层次的用户。无论是初学者的 Etherscan 查询,还是开发者的 Serum 订单簿分析,都能让你更接近 Web3 的“科学家”角色。未来,随着 Web3 生态的演进,更多工具和协议将进一步简化鲸鱼数据的追踪,保持学习,紧跟趋势!

我们最后来总结一下。

综合工具推荐

  • 基础用户:Etherscan + DexTools(查看已成交订单和简单订单簿)。
  • 进阶用户:Dune Analytics + Nansen(分析链上数据和鲸鱼行为)。
  • 开发者:Web3.py + Solana-py + The Graph(深度定制分析)。

注意事项

  • 数据实时性:Mempool 和订单簿数据变化快,需使用 WebSocket 或高频轮询。
  • 隐私与分散:鲸鱼可能使用多地址或混淆工具(如 Tornado Cash),需结合社区线索(如 X 上的 @Whale_Alert)验证。
  • 风险规避:警惕“貔貅盘”或假挂单陷阱,检查合约代码(通过 Etherscan)确保安全。
  • 成本考量:高级工具(如 Nansen、Blocknative)需付费,评估需求后再订阅。

进阶建议

  • 结合 Flashbots 分析 MEV 交易,捕捉鲸鱼的复杂挂单策略。
  • 使用 0x API 查询链下订单簿,获取更多 DEX 的未成交挂单。
  • 关注 X 平台和 Telegram 群组(如 @NewsCoinSpace),获取鲸鱼地址和市场动态。

 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 。
载入天数...载入时分秒...