相信很多没有经验的人对于如何利用EthMon.php来监控以太馆的代币转账交易是束手无策的。因此,本文总结了出现问题的原因和解决方法,希望大家可以通过这篇文章来解决这个问题。
EthMon开发包用于监控ethereal ERC20代币合约的转让交易。
1、开发包概述
EthMon令牌交易监控开发包功能如下:
监控Ethereum合同日志中指定地址的令牌转入和转出交易。
当令牌事务发生时,自定义业务逻辑。
也就是说,它既支持标准的Web3接口(如Infura),也支持Etherscan非标准接口。
EthMon在PHP 7.1环境下运行,主要的类及其关系如下图所示:
见官方描述:http://sc.hubwiz.com/codebag/EthMon-php/的主要代码文件清单的筛法。
00-1010启动前,请用自己的API KEY替换以下文件的内容。
演示/以太扫描键
demo/infura-key
EthMon是开发包的入口类。通过调用其scanBlocks()方法,可以在指定的时间间隔内扫描Ethereum块,提取并解析其中的合约日志。匹配监听地址后,可以调用事件监听器的handleEvent()方法(IEventListener接口的实现对象)并传入解析后的事件对象。
2、使用说明
调用者的程序需要将自己的业务逻辑封装在IeventListener接口的实现类中,比如写入数据库等。下面的代码实现了一个基本的事件监听器——,它只是在屏幕上显示和输出事件对象的内容:
classzlistereimplementsiventlistener {
functionhandleEvent($ event){ 0
var _ dump($ event);
}
}handleEvent()方法的参数是一个具有以下结构的StdClass对象:
区块:交易所的区块编号。
Txhash:事务哈希。
合同:触发事件的合同地址。
名称:事件的名称,例如:转移。
流动:资本流动方向,可能值:入站-转入,出站-转出。
Params:事件参数数组,其成员为:
输出地址,字符串。
转到地址字符串。
可以通过调用to string()方法将令牌量BigInteger转换为字符串。
定义事件侦听器后,可以按如下方式设置和启动它:
2.1 IEventListener
创建EthMon实例时,需要传入一个EthApi对象,例如,使用EthApiWeb3对象:
$ ethApi=new ethApi web 3(' https://mainnet . infura . io/v3/your-API-key ');
$ em=new ethmon($ EThapi);00-1010在创建了EthMon实例之后,您需要调用watchToken()方法来设置要监视的令牌契约,例如监视BNB令牌契约:
$ em-WatchToken('0xb 8c 77482 e 45 f1 f 44 de 1745 f 52 c 74426 c 631 BDD 52 ');00-1010使用EthMon实例的watchAddress()方法添加与要监控的令牌事务相关的地址。例如,以下代码侦听地址0xd 3705916 ce 7 e2c 43806 e0e 0707 C4 B9 d6f 27 e9 ab 2接收令牌的事件:
$ em-Watch ADdress('0xd 3705916 ce 7 e2c 43806 e0e 0707 C4 B9 d6f 27 e 9 ab 2 ',筛孔: flow _ IN);下面的代码侦听地址0x6c6cbb3 ef 3d 690 de7a a 0525 b5 E6 C2 FFE 7 aed6a 5传送出令牌的事件:
$ em-Watch ADdress('0x6c cbbb 3 ef 3d 690 de7 aa 0525 b5 E6 C2 FFE 7 aed 6 a 5 ',筛孔: flow _ OUT);当您想要监听地址的传入/传出令牌事件时,请使用筛孔:FLOW_INOUT标志:
$ em-Watch ADdress('0xd 3705916 ce 7 e2c 43806 e0e 0707 C4 B9 d6f 27 e9 ab 2 ',筛孔:3360 FLoW _ INOUT);00-1010调用EthMon实例的addEventListener()方法添加事件侦听器对象。当EthMon的scanBlocks()扫描块时,满足条件时将调用这些事件侦听器。
例如,下面的代码添加了我们前面定义的EzListener类的一个实例对象:
$ em-addEventListener(new ezlistener);
2.2 创建EthMon对象
,需要定期调用EthMon的scanBlocks()方法来扫描区块链,以便跟踪新的令牌事务日志。scanBlocks()的两个参数分别用于指定扫描的开始块数和结束块数。当使用特殊的最新字符串时,使用最新的块。
例如,以下代码每5秒扫描一次最新的块:
while(true){ 0
$em-scanBlocks('latest ',' latest ');
睡眠(5);
}尽管起始和结束块号可以使用任意整数值,但不建议一次扫描多个块,因为Etherscan和Web3返回的记录数量有限。例如,以下代码尝试扫描从8500000到8500404的405个块:
$em-scanBlocks(8500000,8500404);//不推荐,但可能会失败。建议逐块扫描。考虑到第三方服务的访问频率限制,在两次扫描期间应进行适当的延迟处理。
看完上面的内容,你知道如何使用EthMon.php来监控Ethereum中的令牌转移交易吗?如果您想学习更多技能或了解更多相关内容,请关注行业资讯频道。感谢阅读!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/43708.html