3. 主流公链数据源:Etherscan API、BSCScan API、PolygonScan API 注册与调用

做链上数据分析,第一步不是写代码,而是搞定数据源。说白了,你得先知道去哪儿拿数据,怎么拿到数据。

我个人习惯把区块浏览器API当作「数据水龙头」。Etherscan、BSCScan、PolygonScan 这三兄弟,覆盖了以太坊、BSC、Polygon 三大生态。它们的API接口设计几乎一模一样,学一个等于会三个。

3.1 为什么要用区块浏览器API?

你可能会问:我自己搭节点不行吗?行,但没必要。搭一个以太坊全节点要几百GB硬盘,同步好几天。而API调用,几毫秒就能拿到数据。

我在项目中遇到过这种情况:客户要求实时监控某个地址的转账记录。如果用节点监听,得维护WebSocket连接,还要处理重连逻辑。换成Etherscan API,一个定时任务就搞定了。

核心优势:
  • 零运维成本——不用管节点同步
  • 数据已清洗——交易状态、时间戳都格式化好了
  • 免费额度够用——每天10万次请求,个人项目绰绰有余

3.2 API注册流程

注册其实很简单,但我还是踩过坑。嗯,这里要注意几个细节。

3.2.1 Etherscan API注册

  1. 打开 etherscan.io/register
  2. 用邮箱注册,验证邮箱
  3. 登录后,点右上角头像 → API Keys
  4. 点「Add」创建新Key,给个名字比如「my_analysis」
  5. 复制生成的API Key字符串
小技巧: 我习惯把API Key保存在环境变量里,而不是硬编码在代码中。用 os.getenv("ETHERSCAN_API_KEY") 读取,安全又方便。

3.2.2 BSCScan与PolygonScan注册

流程一模一样,只是网址不同:

平台 注册地址 API基础URL
BSCScan bscscan.com/register api.bscscan.com/api
PolygonScan polygonscan.com/register api.polygonscan.com/api

我曾经犯过一个低级错误:把Etherscan的API Key拿去调BSCScan接口,结果一直报错。后来才发现,每个平台的Key是独立的,得分别注册。

3.3 API调用实战

先看一个最简单的例子——查询某个地址的ETH余额。

3.3.1 用Python调用Etherscan API

import requests

API_KEY = "你的API Key"
ADDRESS = "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18"

url = f"https://api.etherscan.io/api"
params = {
    "module": "account",
    "action": "balance",
    "address": ADDRESS,
    "tag": "latest",
    "apikey": API_KEY
}

response = requests.get(url, params=params)
data = response.json()

# 返回的余额单位是Wei,要除以10^18
balance_eth = int(data["result"]) / 10**18
print(f"地址余额: {balance_eth} ETH")

跑一下,就能拿到地址的实时余额。你想想看,如果自己搭节点,光同步就得等半天。

3.3.2 获取交易列表

做资金流向分析,最常用的是获取地址的交易历史:

params = {
    "module": "account",
    "action": "txlist",
    "address": ADDRESS,
    "startblock": 0,
    "endblock": 99999999,
    "sort": "asc",
    "apikey": API_KEY
}

response = requests.get(url, params=params)
txs = response.json()["result"]

for tx in txs[:5]:  # 只看前5笔
    print(f"Hash: {tx['hash']}")
    print(f"From: {tx['from']}")
    print(f"To: {tx['to']}")
    print(f"Value: {int(tx['value']) / 10**18} ETH")
    print("---")
注意: 一次最多返回10000条记录。如果地址交易量很大,需要用 pageoffset 参数分页。我曾经分析一个高频交易地址,忘了分页,结果只拿到前1万条数据,分析结果完全偏了。

3.4 三大平台API差异

说白了,三个平台的API接口设计几乎一样。唯一的区别是基础URL:

平台 基础URL 代币单位
Etherscan api.etherscan.io/api Wei (10^18)
BSCScan api.bscscan.com/api Wei (10^18)
PolygonScan api.polygonscan.com/api Wei (10^18)

参数名、返回格式完全一致。你写一个函数,换一下base_url就能通用。我在项目里就是这么干的,省了不少时间。

3.5 常见错误与避坑

避坑指南:
  • API Key泄露: 我曾经不小心把Key提交到GitHub,几分钟后就被人盗刷了。建议用环境变量或配置文件,并加入.gitignore
  • 请求频率限制: 免费版每秒最多5次请求。我写了个带延迟的循环,每次请求后sleep(0.3)秒
  • 数据延迟: 区块浏览器的数据有几分钟延迟。做实时分析时要注意,别拿延迟数据做决策
  • 返回值类型: 余额和交易金额都是字符串,记得转成int再计算

3.6 知识体系总览

下面这张图,帮你理清本章的核心逻辑:

主流公链数据源调用流程 注册API Key Etherscan BSCScan PolygonScan API调用 查询余额 获取交易列表 代币转账记录 数据分析 资金流向 地址画像 交易模式 三个平台API接口一致,只需更换base_url即可通用 ⚠ 注意:API Key需分别注册,免费版有频率限制

这张图展示了从注册到调用的完整链路。你只要搞定一个平台,其他两个就是复制粘贴的事。

好了,API注册和调用就这些。记住:Key别泄露,频率别超限,数据别全信(有延迟)。做到这三点,数据源这块就稳了。

专注资料整理