Skip to content

rushteam/chain-listen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Web3 多链监听系统

支持多个区块链的统一监听系统,使用 Golang 实现。

📚 文档导航

支持的区块链

  • 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.yaml

方式二:手动安装

1. 安装依赖

go mod download
go mod tidy

2. 配置

复制并编辑配置文件:

cp config/config.example.yaml config/config.yaml
# 编辑 config.yaml 填入各链的 RPC 节点地址和监听地址

3. 运行

# 直接运行(监听所有启用的链)
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)
  • 💯 完全去中心化方案:可以运行自己的全节点(localhost

详细说明请查看:

配置说明

配置文件示例:

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)
  • 自动检测合约地址(无需手动配置)

生产级交易解析

系统集成了生产级交易解析引擎,自动识别以下操作类型:

支持的操作类型

  1. 转账 (Transfer)

    • ERC20 代币转账
    • 原生币转账
  2. Swap(交换)

    • Uniswap V2/V3
    • PancakeSwap
    • SushiSwap
    • 自动识别输入/输出代币和金额
  3. Mint(铸造)

    • NFT 铸造
    • 代币铸造
    • LP 代币铸造(流动性)
  4. Burn(销毁)

    • 代币销毁
    • LP 代币销毁
  5. Add Liquidity(添加流动性)

    • Uniswap V2 添加流动性
    • PancakeSwap 添加流动性
  6. Remove Liquidity(移除流动性)

    • Uniswap V2 移除流动性
    • PancakeSwap 移除流动性
  7. Approve(授权)

    • ERC20 代币授权
    • NFT 授权
  8. Slash(验证者惩罚)

    • BNB Chain 验证者惩罚操作
    • 自动识别并提取验证者地址
  9. 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 标准方法
  • 代币信息获取:自动获取新代币的 namesymboldecimals
  • 实时通知:通过专用通道发送新合约/代币创建事件

监听内容

新合约创建

  • 合约地址
  • 创建者地址
  • 创建交易哈希
  • 合约代码大小

新代币创建

  • 代币地址
  • 代币符号(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)
    }
}

Honeypot 检测工具

独立的蜜罐合约检测工具,可以检测 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

扩展

要添加新的区块链支持:

  1. pkg/listener/ 下创建新目录
  2. 实现 Listener 接口
  3. 在配置文件中添加相应配置
  4. 在 manager 中注册新监听器

License

MIT

About

listen all chains (btc\ethereum\solana\sui\tron\bnb)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages