合约事件监听
监听链上事件,保存到数据库,并可以推送到指定服务。
当前只支持EVM的链,ethereum、polygon、BSC……
说明
主程序路径:cmd/event_filter
log_file:
log_level: 3
chain:
rpc_node: https://eth-mainnet.g.alchemy.com/v2/kk6oTEe0a35zzK3Ia67SZtzzibO2N8Fq
delay_block: 7
db:
engine: sqlite
dsn: sqlite.db
log_level: 2
subscriptions:
- alias: token
contract:
- 0x2260fac5e5542a773aa44fbcfedf7c193bc2c599
abi_file: erc20
event_name: Transfer
filter:
start_block: 15817750
blocks_per_req: 5
wait_per_req: 1000
web_hook: http://127.0.0.1:8080/notify/001
- alias: token2
contract:
- 0x2260fac5e5542a773aa44fbcfedf7c193bc2c599
abi_file: erc20
event_name: Approve
filter:
start_block: 15817750
blocks_per_req: 5
wait_per_req: 1000
web_hook:
http:
port: 8080
prefix_path: /blockchain/event/
- 只需要修改好配置文件,启动程序就可以
- chain
- rpc_node:区块链节点的RPC地址
- delay_block: 区块链的区块确认数,防止分叉导致日志不准确
- db: 数据库的相关配置
- engine:数据库类型,支持本地的sqlite,支持mysql/postgres/sqlserver
- dsn:连接数据库的参数,如果是sqlite,对应的是文件名
- subscriptions:要订阅/过滤的事件,它是一个数组,可以同时监听多个事件
- alias:别名,不允许重名,不同的alias的事件,存储在不同的数据库表中
- contract:要监听的智能合约地址,它是一个数组,允许监听多个相同类型合约
- abi_file:智能合约的abi文件,默认支持erc20/erc721/erc1155(这3个配置将使用内置的abi文件)
- event_name:要监听的事件名(要在abi文件中);如果为空,则监听合约的所有事件
- filter:它是map[string]string,想要进一步过滤的事件,比如转账的收款地址,则可以设置 to:0x1234…
- start_block: 从该区块开始过滤事件
- web_hook:允许为空,非空则表示想要接受事件推送,有新的事件,将用http.POST数据到对应url
- http: 启动一个http服务,可以让业务按需主动查询事件
- port:服务端口
- prefix_path:服务的path的前缀,具体有两个子路径”/logs”和”/unnotified_logs”
- 请求方法都是GET,请求参数有alias,offset,limit(默认20)