这篇文章主要讲解了“PHP开发包OmniMon怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP开发包OmniMon怎么使用”吧!
创新互联专业为企业提供拉萨网站建设、拉萨做网站、拉萨网站设计、拉萨网站制作等企业网站建设、网页设计与制作、拉萨企业网站模板建站服务,10多年拉萨做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
1、开发包概述
OmniMon开发包特点如下:
监听任意指定地址发生的Omni/USDT代币转入/转出交易
监听任意指定地址的比特币转入/转出交易
自定义代币交易发生时的业务逻辑
OmniMon目前可以监听四种类型的交易事件:
比特币流入事件:当比特币流入监听地址时触发
比特币流出事件:当比特币流出监听地址时触发
Omni/USDT代币流入事件:当Omni/USDT代币转入监听地址时触发
Omni/USDT代币流出事件:当Omni/USDT代币转出监听地址时触发
OmniMon支持所有类型的Omni Layer交易的解析。
OmniMon运行于PHP 7.1+环境下,主要类以及其关系如下图所示:
2、基本使用方法
Monitor是OmniMon开发包的入口类,使用Monitor监视Omni/USDT代币或 比特币转账交易的一般步骤如下:
创建
Monitor
实例使用实例的
watch()
方法添加要监视的地址,可以多次调用该方法来 添加多个要监视的地址使用实例的
addEventListener()
方法添加转账交易事件监听器,可以多次调用 该方法来添加不同的监听处理逻辑定期调用实例的
scanBlocks()
方法扫描新的区块,该方法将自动触发前面 添加的交易事件监听器
2.1 创建Monitor实例对象
实例化Monitor需要传入两个参数,分别用于访问区块链和解析Omni代币元数据。 例如,下面的代码利用一个ChainRpc对象和一个CloudPropertyMetaResolver对象 来创建Monitor实例:
use OmniTool\Monitor; use OmniTool\ChainRpc; use OmniTool\CloudPropertyMetaResolver; $monitor = new Monitor( new ChainRpc('http://user:123456@127.0.0.1:8332'), new CloudPropertyMetaResolver );
2.2 添加要监听的地址
使用Monitor实例的watch()
方法,可以添加要监听的地址。例如,下面的 代码添加三个要监听的地址:
$addressList = [ '15VSP7X29kR3yoaN2Xv3GQ898JeUp5dAtk', '19i2mRRtUeThfFyPd1j1Ui3LVbTFM9sdie', '3AqUTUsBkAkDBRM8zoAUbBhPxw8x541cZk' ]; foreach($addressList as $address) $monitor->watch($address);
2.3 添加交易事件监听处理器
使用Monitor实例的addEventListener()
方法,添加自定义的处理逻辑。 例如,下面的代码定义一个监听接口实现类UtxoSaver,它负责将新发现的UTXO 存入数据库:
use OmniTool\IEventListener; class UtxoSaver implements IEventListener{ protected $db; function __construct($db){ $this->db = $db; } function handleEvent($event){ if($event->type != 'in_btc') return; $db->saveUtxo( $event->height, $event->txid, $event->vout, $event->value, $event->address, $event->script ); } } $monitor->addEventListener(new UtxoSaver);
OmniMon目前支持四种事件,其事件对象的结构也有不同:
in_btc:比特币流入,事件结构如下:
height:区块高度
txid:交易ID
vout:交易输出序号
value:交易金额,单位:satoshi
address:流入地址
script:流入地址的公钥脚本
out_btc:比特币流出,事件结构如下:
height:区块高度
txid:交易ID
vout:交易输出序号
value:交易金额,单位:satoshi
address:流出地址
script:流出地址的公钥脚本
in_omni:omni/usdt代币流入,事件结构如下:
address:发送账户地址
script:发送账户公钥脚本
height:区块高度
txid:交易ID
sender:发送账户对象,结构如下:
reference:接收账户对象,结构同上
omin:omni交易对象,根据交易类型不同有所区别
out_omni:omni/usdt代币流出
address:发送账户地址
script:发送账户公钥脚本
height:区块高度
txid:交易ID
sender:发送账户对象,结构如下:
reference:接收账户对象,结构同上
omin:omni交易对象,根据交易类型不同有所区别
2.4 扫描区块链
需要周期性地调用Monitor实例的scanBlocks()
方法来扫描区块链以便跟踪新的Omni/USDT代币 或比特币交易。scanBlocks()的两个参数分别用来指定扫描的起始区块号和结束区块号, 当使用特殊的 latest字符串时,表示使用最新的区块。
例如,下面的代码每隔10分钟扫描一次最新的区块:
while(true){ $monitor->scanBlocks('latest','latest'); sleep(60*10); }
感谢各位的阅读,以上就是“PHP开发包OmniMon怎么使用”的内容了,经过本文的学习后,相信大家对PHP开发包OmniMon怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
文章标题:PHP开发包OmniMon怎么使用
链接分享:http://scgulin.cn/article/peheie.html