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注册
- 打开 etherscan.io/register
- 用邮箱注册,验证邮箱
- 登录后,点右上角头像 → API Keys
- 点「Add」创建新Key,给个名字比如「my_analysis」
- 复制生成的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条记录。如果地址交易量很大,需要用
page 和 offset 参数分页。我曾经分析一个高频交易地址,忘了分页,结果只拿到前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别泄露,频率别超限,数据别全信(有延迟)。做到这三点,数据源这块就稳了。