主页 > imtoken钱包官网下载2.0 > 如何使用 EthMon.php 监控以太坊代币转账交易

如何使用 EthMon.php 监控以太坊代币转账交易

imtoken钱包官网下载2.0 2023-04-14 06:47:49

如何使用EthMon.php监控以太坊代币转账交易以太坊代币转账消耗以太币吗,相信很多没有经验的人对此一头雾水,所以本文总结了问题产生的原因和解决方法,希望通过本文可以为大家解决这个问题。

EthMon开发包用于监控以太坊ERC20代币合约的转账交易。

一、开发包概述

EthMon代币交易监控开发包的特点如下:

EthMon 运行在 PHP 7.1+ 环境下。 主要类及其关系如下图所示:

怎么用EthMon.php监听以太坊代币转账交易

EthMon的主要代码文件列表请参考官方说明:

2.使用说明

开始前,将以下文件内容替换为自己的API KEY

EthMon是开发包的入门类。 调用其scanBlocks()方法可以扫描指定范围内的以太坊区块,提取并分析其中的合约日志,匹配到监听地址后调用事件监听器(IEventListener接口实现对象)。 handleEvent() 方法并传入解析后的事件对象。

2.1 IEventListener

调用方程序需要在IeventListener接口的实现类中封装自己的业务逻辑,比如写入数据库等。 下面的代码实现了一个基本的事件监听器——简单地将输出事件对象的内容显示到屏幕上:

class EzListener implements IEventListener{
  function handleEvent($event){
    var_dump($event);
  }
}

handleEvent() 方法的参数是具有以下结构的 StdClass 对象:

定义事件侦听器后,您可以按如下方式设置并开始侦听:

2.2 创建一个EthMon对象

要创建 EthMon 实例,需要传入一个 EthApi 对象,例如使用 EthApiWeb3 对象:

$ethApi = new EthApiWeb3('https://mainnet.infura.io/v3/');
$em = new EthMon($ethApi);

2.3 设置要监控的代币合约

创建 EthMon 实例后,需要调用 watchToken() 方法设置需要监控的代币合约,例如监控 BNB 代币合约:

$em->watchToken('0xb8c77482e45f1f44de1745f52c74426c631bdd52');

2.4 添加要监控的token交易相关地址

使用 EthMon 实例的 watchAddress() 方法添加要监控的代币交易相关地址。 比如下面的代码监听地址0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2收到token的事件:

$em->watchAddress('0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2',EthMon::FLOW_IN);

下面的代码在地址 0x6c6cbbb3ef3d690de7aa0525b5e6c2ffe7aed6a5 监听代币转账事件:

$em->watchAddress('0x6c6cbbb3ef3d690de7aa0525b5e6c2ffe7aed6a5',EthMon::FLOW_OUT);

当希望监听地址的转入/转出令牌事件时,使用 EthMon::FLOW_INOUT 标志:

$em->watchAddress('0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2',EthMon::FLOW_INOUT);

2.5 添加事件监听器

调用 EthMon 实例的 addEventListener() 方法添加事件监听对象。 当 EthMon 的 scanBlocks() 扫描区块时,这些事件监听器会在满足条件时被调用。

例如,下面的代码添加了我们之前定义的 EzListener 类的实例对象:

$em->addEventListener(new EzListener);

2.6 扫描区块链

需要定期调用 EthMon 的 scanBlocks() 方法扫描区块链,以跟踪新的代币交易日志。 scanBlocks()的两个参数分别用于指定扫描的起始块号和结束块号。 当使用特殊的最新字符串时,表示使用最新的块。

例如,下面的代码每 5 秒扫描一次最新的区块:

while(true){
  $em->scanBlocks('latest','latest');
  sleep(5);
}

虽然任何整数值都可以用作起始和结束区块编号以太坊代币转账消耗以太币吗,但由于 Etherscan 和 Web3 返回的记录数量有限,不建议一次扫描多个区块。 例如,以下代码尝试扫描从 8500000 到 8500404 的 405 个块:

$em->scanBlocks(8500000,8500404);    //不建议,可能失败

建议逐块扫描,并考虑第三方服务的访问频率限制,在两次扫描之间进行适当的延时处理。

看完以上内容,你是否掌握了如何使用EthMon.php监控以太坊代币转账交易呢? 如果您还想学习更多技能或想了解更多相关内容,欢迎关注易速云行业资讯频道,感谢阅读!