支持多个区块链的统一监听系统,使用 Golang 实现。
- 架构分析文档 - 详细的系统架构设计、数据流程和业务模块说明
- 功能扩展计划 - 参考 DEX Screener 的功能扩展规划(待实现)
- ABI 解析器指南 - 基于 Go-ethereum ABI 的交易解析器使用指南
- 事件解析器指南 - 专门解析 Solidity 事件日志的解析器使用指南
- 快速开始 - 快速上手指南
- 功能特性 - 系统功能列表
- Ethereum (以太坊)
- BNB Chain (币安智能链)
- Polygon (波卡链,EVM 兼容)
- Arbitrum (仲裁链,EVM 兼容)
- Solana
- Sui
- Tron (波场)
- Bitcoin (比特币)
- ✅ 多链监听:支持 8 条主流区块链
- ✅ 代币监听:支持 ERC20/TRC20 代币转账监听
- ✅ 合约监听:监听指定合约的所有交互(调用、转账等)
- ✅ 全链监听:可监听所有交易(不限制地址)
- ✅ 区块存储:支持文件存储、Kafka 投递、Callback 回调
- ✅ Honeypot 检测:独立工具检测蜜罐合约
- ✅ RPC 接口:提供类似全节点的查询接口
web3-listen/
├── cmd/
│ └── listener/ # 主程序入口
├── pkg/
│ ├── config/ # 配置管理
│ ├── types/ # 通用类型定义
│ ├── utils/ # 工具函数
│ └── listener/ # 监听器实现
│ ├── interface.go # 统一接口
│ ├── ethereum/ # 以太坊监听器
│ ├── solana/ # Solana监听器
│ ├── sui/ # Sui监听器
│ ├── tron/ # Tron监听器
│ ├── bnb/ # BNB Chain监听器
│ └── btc/ # BTC监听器
├── config/
│ └── config.yaml # 配置文件示例
├── go.mod
└── README.md
# 运行安装脚本
./install.sh
# 编辑配置文件
vi config/config.yaml
# 运行程序
./bin/web3-listen -config=config/config.yamlgo mod download
go mod tidy复制并编辑配置文件:
cp config/config.example.yaml config/config.yaml
# 编辑 config.yaml 填入各链的 RPC 节点地址和监听地址# 直接运行(监听所有启用的链)
go run cmd/listener/main.go -config=config/config.yaml
# 只监听指定的链
go run cmd/listener/main.go -config=config/config.yaml -chain=ethereum
go run cmd/listener/main.go -config=config/config.yaml -chain=bnb
go run cmd/listener/main.go -config=config/config.yaml -chain=solana
go run cmd/listener/main.go -config=config/config.yaml -chain=sui
go run cmd/listener/main.go -config=config/config.yaml -chain=tron
go run cmd/listener/main.go -config=config/config.yaml -chain=btc
# 或编译后运行
make build
./bin/web3-listen -config=config/config.yaml -chain=ethereum
# 或使用 make
make run重要:系统支持直接连接区块链网络,无需通过第三方服务中转!
-
✅ 默认配置使用官方/社区公共节点(无第三方中转)
- BNB Chain: 币安官方节点 (
binance.org) - Solana: Solana 官方节点 (
solana.com) - Tron: TronGrid 官方节点 (
trongrid.io) - Sui: Sui 官方全节点 (
sui.io) - Ethereum: 公共全节点 (
ankr.com,llamarpc.com)
- BNB Chain: 币安官方节点 (
-
💯 完全去中心化方案:可以运行自己的全节点(
localhost)
详细说明请查看:
- DIRECT_CONNECTION.md - 如何直接连接区块链,避免第三方中转
- RPC_NODES.md - RPC 节点详细说明
配置文件示例:
chains:
ethereum:
enabled: true
rpc_url: "https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY"
addresses:
- "0x..."
bnb:
enabled: true
rpc_url: "https://bsc-dataseed.binance.org"
addresses:
- "0x..."
solana:
enabled: true
rpc_url: "https://api.mainnet-beta.solana.com"
addresses:
- "SOLANA_ADDRESS"
sui:
enabled: true
rpc_url: "https://fullnode.mainnet.sui.io:443"
addresses:
- "0x..."
tron:
enabled: true
rpc_url: "https://api.trongrid.io"
addresses:
- "T..."
btc:
enabled: true
rpc_url: "https://blockchain.info"
addresses:
- "1..."程序支持以下命令行参数:
# 查看帮助
./listener -h
# 参数说明
-config string # 配置文件路径 (默认: "config/config.yaml")
-chain string # 只监听指定的链 (可选值: ethereum|bnb|polygon|arbitrum|solana|sui|tron|btc)
# 留空则监听配置文件中所有启用的链# 监听所有启用的链(配置文件中的 enabled: true)
./listener -config=config/config.yaml
# 只监听 Ethereum
./listener -config=config/config.yaml -chain=ethereum
# 只监听 BNB Chain
./listener -config=config/config.yaml -chain=bnb
# 只监听 Polygon
./listener -config=config/config.yaml -chain=polygon
# 只监听 Arbitrum
./listener -config=config/config.yaml -chain=arbitrum
# 只监听 Solana
./listener -config=config/config.yaml -chain=solana
# 只监听 Sui
./listener -config=config/config.yaml -chain=sui
# 只监听 Tron
./listener -config=config/config.yaml -chain=tron
# 只监听 Bitcoin
./listener -config=config/config.yaml -chain=btc注意:使用 -chain 参数时,程序会自动禁用配置文件中其他所有链,只启动指定的链。这在你只想运行某个特定链的监听器时很有用。
监听器会实时监听配置的地址,当有新交易时会输出:
package main
import (
"github.com/rushteam/chain-listen/pkg/config"
"github.com/rushteam/chain-listen/pkg/listener"
)
func main() {
cfg := config.Load("config/config.yaml")
// 创建监听器管理器
manager := listener.NewManager(cfg)
// 启动所有已启用的监听器
manager.StartAll()
}系统支持将监听到的区块和交易数据保存到本地,并提供类似全节点的查询接口。
- ✅ 自动存储:监听到的区块和交易自动保存到本地
- ✅ 查询接口:提供 JSON-RPC 2.0 和 RESTful API 接口
- ✅ 轻量级:使用文件系统存储,无需数据库
- ✅ 多链支持:所有链的数据独立存储
在配置文件中添加:
storage:
enabled: true
data_dir: "./data/blocks"
server:
port: 8080 # RPC 服务端口# JSON-RPC 查询最新区块
curl -X POST http://localhost:8080/rpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"getLatestBlock","params":["ethereum"],"id":1}'
# RESTful API 查询区块
curl http://localhost:8080/api/v1/blocks/ethereum/12345678
# 查询交易
curl http://localhost:8080/api/v1/transactions/ethereum/0xabc123...详细文档请查看:BLOCK_STORAGE.md
系统支持两种合约监听方式:
监听指定的合约地址:
ethereum:
chain: ethereum
enabled: true
rpc_url: "https://rpc.ankr.com/eth"
# 监听指定合约
contracts:
- address: "0xYourContractAddress" # 合约地址
name: "MyContract" # 合约名称(可选)自动检测并监听所有合约交互,无需指定地址:
ethereum:
chain: ethereum
enabled: true
rpc_url: "https://rpc.ankr.com/eth"
# 监听所有合约(自动检测)
listen_all_contracts: true- ✅ 所有向合约发送的交易(包括原生币转账)
- ✅ 所有合约方法调用(通过 data 字段)
- ✅ 合约产生的所有事件(logs)
- ✅ 自动检测合约地址(无需手动配置)
系统集成了生产级交易解析引擎,自动识别以下操作类型:
-
转账 (Transfer)
- ERC20 代币转账
- 原生币转账
-
Swap(交换)
- Uniswap V2/V3
- PancakeSwap
- SushiSwap
- 自动识别输入/输出代币和金额
-
Mint(铸造)
- NFT 铸造
- 代币铸造
- LP 代币铸造(流动性)
-
Burn(销毁)
- 代币销毁
- LP 代币销毁
-
Add Liquidity(添加流动性)
- Uniswap V2 添加流动性
- PancakeSwap 添加流动性
-
Remove Liquidity(移除流动性)
- Uniswap V2 移除流动性
- PancakeSwap 移除流动性
-
Approve(授权)
- ERC20 代币授权
- NFT 授权
-
Slash(验证者惩罚)
- BNB Chain 验证者惩罚操作
- 自动识别并提取验证者地址
-
Honeypot 检测
- 自动检测蜜罐合约
- 识别无法卖出的代币
- ✅ 方法签名识别:通过方法 ID 自动识别操作类型
- ✅ 事件日志解析:从事件日志中提取详细信息
- ✅ DEX 识别:自动识别 Uniswap、PancakeSwap 等 DEX
- ✅ 参数解析:自动解析 Swap 路径、金额等信息
- ✅ 实时蜜罐检测:异步检测合约是否为蜜罐
[ethereum] 🔄 Swap: Hash=0x..., DEX=Uniswap V2, TokenIn=0x..., TokenOut=0x..., AmountIn=1000000, AmountOut=2000000
[ethereum] ➕ Add Liquidity: Hash=0x..., Pool=0x...
[bnb] ⚡ Slash: Hash=0x..., Contract=0x..., Validator=0x...
[ethereum] ⚠️ HONEYPOT DETECTED: Hash=0x..., Contract=0x...
系统支持监听新合约和新代币(ERC20)的创建,可以及时发现新项目。
ethereum:
chain: ethereum
enabled: true
rpc_url: "https://rpc.ankr.com/eth"
# 监听新合约创建
listen_new_contracts: true # 监听所有新合约创建
# 监听新代币创建(推荐)
listen_new_tokens: true # 监听新 ERC20 代币创建,自动获取代币信息- ✅ 自动检测合约创建:通过
to地址为null的交易识别 - ✅ ERC20 自动识别:检查合约代码是否包含 ERC20 标准方法
- ✅ 代币信息获取:自动获取新代币的
name、symbol、decimals - ✅ 实时通知:通过专用通道发送新合约/代币创建事件
新合约创建:
- 合约地址
- 创建者地址
- 创建交易哈希
- 合约代码大小
新代币创建:
- 代币地址
- 代币符号(Symbol)
- 代币名称(Name)
- 精度(Decimals)
- 创建者地址
[ethereum] 🪙 发现新代币: Address=0x..., Symbol=USDT, Name=Tether USD, Decimals=6, Creator=0x...
[ethereum] ✅ 新代币已记录: 0x...
[ethereum] 📄 新合约已记录: Address=0x..., Creator=0x..., CodeSize=1234
监听器会通过 SubscribeContractCreations() 方法提供合约创建事件通道,您可以在代码中订阅这些事件:
// 获取合约创建事件通道
creationChan := listener.SubscribeContractCreations()
// 处理合约创建事件
for creation := range creationChan {
if creation.IsERC20 {
fmt.Printf("新代币: %s (%s)\n", creation.Address, creation.TokenInfo.Symbol)
} else {
fmt.Printf("新合约: %s\n", creation.Address)
}
}独立的蜜罐合约检测工具,可以检测 DeFi 中的蜜罐骗局。
# 编译工具
make honeypot
# 检测合约
./bin/honeypot -rpc=https://rpc.ankr.com/eth -contract=0x合约地址
# 指定链 ID
./bin/honeypot -rpc=https://bsc-dataseed.binance.org \
-contract=0x合约地址 \
-chainid=56详细文档请查看:HONEYPOT_GUIDE.md
要添加新的区块链支持:
- 在
pkg/listener/下创建新目录 - 实现
Listener接口 - 在配置文件中添加相应配置
- 在 manager 中注册新监听器
MIT