OmniMon开发包用于监听Omni/USDT代币以及比特币的转账交易,官方下载地址:
http://sc.hubwiz.com/codebag/omnimon-php/。
1、开发包概述
OmniMon开发包特点如下:
- 监听任意指定地址发生的Omni/USDT代币转入/转出交易
- 监听任意指定地址的比特币转入/转出交易
- 自定义代币交易发生时的业务逻辑
OmniMon目前可以监听四种类型的交易事件:
- 比特币流入事件:当比特币流入监听地址时触发
- 比特币流出事件:当比特币流出监听地址时触发
- Omni/USDT代币流入事件:当Omni/USDT代币转入监听地址时触发
- Omni/USDT代币流出事件:当Omni/USDT代币转出监听地址时触发
OmniMon目前支持如下类型Omni Layer交易的解析:
| 交易类型代码 |
交易类型名称 |
备注 |
| 0 |
SimpleSend |
Omni代币转账,最常用 |
| 3 |
SendToOwners |
Omni代币空投 |
| 20 |
SellForBitcoin |
去中心化交易,卖出 |
| 21 |
SellForOmniCoin |
去中心化交易,卖出 |
| 22 |
BuyWithBitcoin |
去中心化交易,买入 |
| 50 |
CreatePropertyWithFixedNumbers |
创建固定发行量资产 |
| 51 |
CreatePropertyWithVarNumbers |
创建可变发行量资产 |
| 52 |
PromoteProperty |
推广资产 |
| 53 |
CloseCrowdsale |
关闭众售 |
| 54 |
CreateManagedProperty |
创建智能资产 |
| 55 |
GrantPropertyToken |
资产授权 |
| 56 |
RevokePropertyToken |
取消资产授权 |
| 70 |
ChangePropertyIssuer |
变更资产发行人 |
OmniMon运行于PHP 7.1+环境下,主要类以及其关系如下图所示:
![在这里插入图片描述 在这里插入图片描述]()
OmniMon的主要代码文件清单如下:
| 文件路径 |
说明 |
| omni.php/src/ |
OmniMon源代码目录 |
| omni.php/src/Monitor.php |
交易监视器实现类,支持Omni/USDT和比特币 |
| omni.php/src/IChain.php |
区块链访问接口 |
| omni.php/src/ChainRpc.php |
基于RPC API的区块链访问实现类 |
| omni.php/src/RpcClient.php |
RPC API封装类 |
| omni.php/src/RpcModule.php |
RPC API实现模块,支持Omni/USDT节点和比特币节点 |
| omni.php/src/OmniParser.php |
Omni Layer协议解析类 |
| omni.php/src/DeBuffer.php |
Omni Layer协议反序列化缓冲区实现类 |
| omni.php/src/PropertyMetaResolverInterface.php |
Omni/USDT代币元数据解析器接口 |
| omni.php/src/LocalPropertyMetaResolver.php |
基于本地节点实现的Omni/USDT代币元数据解析器 |
| omni.php/src/CloudPropertyMetaResolver.php |
基于第三方API实现的Omni/USDT代币元数据解析器 |
| omni.php/src/IEventListener.php |
转账交易事件监听器接口 |
| omni.php/src/Utils.php |
辅助工具类 |
| demo/ |
UtxoScanner演示代码目录 |
| demo/monitor-demo.php |
Monitor类演示代码 |
| demo/omniparser-demo.php |
OmniParser类演示代码 |
| demo/debuffer-demo.php |
DeBuffer类演示代码 |
| vendor/ |
第三方依赖包 |
| composer.json |
composer配置文件 |
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目前支持四种事件,其事件对象的结构也有不同:
2.4 扫描区块链
需要周期性地调用Monitor实例的scanBlocks()方法来扫描区块链以便跟踪新的Omni/USDT代币
或比特币交易。scanBlocks()的两个参数分别用来指定扫描的起始区块号和结束区块号,
当使用特殊的 latest字符串时,表示使用最新的区块。
例如,下面的代码每隔10分钟扫描一次最新的区块:
while(true){
$monitor->scanBlocks('latest','latest');
sleep(60*10);
}
官方下载地址:Omni/USDT交易监听PHP开发包 - 汇智网