本项目是一个基于 viem 的以太坊合约事件监听命令行工具。
支持通过命令行参数指定合约地址和事件名,自动从 Etherscan 获取 ABI 并监听事件,适用于 Sepolia 测试网。
-
Node.js 版本:建议 Node.js 18 及以上
-
依赖安装:
npm install
-
环境变量配置
在项目根目录新建.env文件,内容如下:SEPOLIA_RPC=https://sepolia.infura.io/v3/你的InfuraApiKey ETHERSCAN_API_KEY=你的EtherscanApiKey
node watch.js --address <合约地址>例如:
node watch.js --address 0xb3d39454b902c97264e8074ed2d94838eccb6ecfnode watch.js --address <合约地址> --events <事件名1,事件名2,...>例如只监听 Listed 和 Sold 事件:
node watch.js --address 0xb3d39454b902c97264e8074ed2d94838eccb6ecf --events Listed,Sold--address或-a:必填,要监听的合约地址。--events或-e:可选,监听的事件名称,多个用英文逗号分隔。不填则监听所有事件。
- 需要在 Etherscan 上验证过源码的合约才能自动获取 ABI。
- 监听事件时会自动打印事件参数到控制台。
- 若监听不到事件,请检查 RPC、API KEY、合约地址和事件名是否正确。
(base) ➜ viem_watcher.sh node watch.js --address 0xb3d39454b902c97264e8074ed2d94838eccb6ecf
已监听事件: Delisted
已监听事件: Listed
已监听事件: OwnershipTransferred
已监听事件: Sold
检测到事件 [Delisted] 原始log: {
eventName: 'Delisted',
args: { listId: 4n, tokenId: 1n },
removed: false,
logIndex: 46,
transactionIndex: 20,
transactionHash: '0x359db3ae9600d79b2f87d9730d6a4cf6a10ec9e91e0df168c011aa3af3566cf6',
blockHash: '0xf7ff8bd3f940ddda2a13652b8d6b58b6cee44504f10a57232da801ca8a1c6f09',
blockNumber: 8812064n,
address: '0xb3d39454b902c97264e8074ed2d94838eccb6ecf',
data: '0x',
topics: [
'0x59acfc838c3817a4ad51829dec2a433647fb0229670ccb3e8093af5aaa64f7a1',
'0x0000000000000000000000000000000000000000000000000000000000000004',
'0x0000000000000000000000000000000000000000000000000000000000000001'
]
}
检测到事件 [Listed] 原始log: {
eventName: 'Listed',
args: {
listId: 5n,
tokenId: 1n,
seller: '0xE991bC71A371055B3f02aa79b79E4b714A3D04c0',
price: 3n
},
removed: false,
logIndex: 29,
transactionIndex: 9,
transactionHash: '0xfc29452c9c1760749abd74341257fe46789434c42e24a616f8e0a759361b779a',
blockHash: '0x16f140b59267f841331656fe91c995aba3f39b925e7b25031a416b2dad87ec37',
blockNumber: 8812071n,
address: '0xb3d39454b902c97264e8074ed2d94838eccb6ecf',
data: '0x0000000000000000000000000000000000000000000000000000000000000003',
topics: [
'0xfc1c0dadda05af971023a71c686d9fbfa12ebe1c41d696c041672f9c0ac4c2b6',
'0x0000000000000000000000000000000000000000000000000000000000000005',
'0x0000000000000000000000000000000000000000000000000000000000000001',
'0x000000000000000000000000e991bc71a371055b3f02aa79b79e4b714a3d04c0'
]