cover

Omni协议交易监听PHP开发包

汇智网 / hubwiz.com

监听任意地址的Omni/USDT或BTC转账交易,支持自定义监听到转账交易时的处理逻辑。

1、开发包概述

OmniMon开发包用于监听Omni/USDT代币以及比特币的转账交易,特点如下:

  • 监听任意指定地址发生的Omni/USDT代币转入/转出交易
  • 监听任意指定地址的比特币转入/转出交易
  • 自定义代币交易发生时的业务逻辑

OmniMon目前可以监听四种类型的交易事件:

  • 比特币流入事件:当比特币流入监听地址时触发
  • 比特币流出事件:当比特币流出监听地址时触发
  • Omni/USDT代币流入事件:当Omni/USDT代币转入监听地址时触发
  • Omni/USDT代币流出事件:当Omni/USDT代币转出监听地址时触发

OmniMon目前支持如下类型Omni Layer交易的解析:

交易类型代码交易类型名称备注
0SimpleSendOmni代币转账,最常用
3SendToOwnersOmni代币空投
20SellForBitcoin去中心化交易,卖出
21SellForOmniCoin去中心化交易,卖出
22BuyWithBitcoin去中心化交易,买入
50CreatePropertyWithFixedNumbers创建固定发行量资产
51CreatePropertyWithVarNumbers创建可变发行量资产
52PromoteProperty推广资产
53CloseCrowdsale关闭众售
54CreateManagedProperty创建智能资产
55GrantPropertyToken资产授权
56RevokePropertyToken取消资产授权
70ChangePropertyIssuer变更资产发行人

OmniMon运行于PHP 7.1+环境下,主要类以及其关系如下图所示:

omnimon uml chart

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.phpRPC API封装类
omni.php/src/RpcModule.phpRPC API实现模块,支持Omni/USDT节点和比特币节点
omni.php/src/OmniParser.phpOmni Layer协议解析类
omni.php/src/DeBuffer.phpOmni Layer协议反序列化缓冲区实现类
omni.php/src/PropertyMetaResolverInterface.phpOmni/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.phpMonitor类演示代码
demo/omniparser-demo.phpOmniParser类演示代码
demo/debuffer-demo.phpDeBuffer类演示代码
vendor/第三方依赖包
composer.jsoncomposer配置文件

2、基本使用方法

Monitor是OmniMon开发包的入口类,使用Monitor监视Omni/USDT代币或 比特币转账交易的一般步骤如下:

  1. 创建Monitor实例
  2. 使用实例的watch()方法添加要监视的地址,可以多次调用该方法来 添加多个要监视的地址
  3. 使用实例的addEventListener()方法添加转账交易事件监听器,可以多次调用 该方法来添加不同的监听处理逻辑
  4. 定期调用实例的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代币流入,事件结构如下:
    • height:区块高度
    • txid:交易ID
    • sender:发送账户对象,结构如下:
      • address:发送账户地址
      • script:发送账户公钥脚本
    • reference:接收账户对象,结构同上
    • omin:omni交易对象,根据交易类型不同有所区别
  • out_omni:omni/usdt代币流出
    • height:区块高度
    • txid:交易ID
    • sender:发送账户对象,结构如下:
      • address:发送账户地址
      • script:发送账户公钥脚本
    • reference:接收账户对象,结构同上
    • omin:omni交易对象,根据交易类型不同有所区别

2.4 扫描区块链

需要周期性地调用Monitor实例的scanBlocks()方法来扫描区块链以便跟踪新的Omni/USDT代币 或比特币交易。scanBlocks()的两个参数分别用来指定扫描的起始区块号和结束区块号, 当使用特殊的 latest字符串时,表示使用最新的区块。

例如,下面的代码每隔10分钟扫描一次最新的区块:

while(true){
  $monitor->scanBlocks('latest','latest');
  sleep(60*10);
}

声 明

本站所提供软件包仅用于学习和研究,请依法合规使用。

本站所提供软件包均提供完整源码,使用前请认真阅读源代码和文档以确保充分理解软件包的设计与功能实现,本站不承担 因不当使用本站所提供软件包而造成的任何法律风险或财产损失责任。

¥1500.00
查看授权信息
  • 付费成功自动开通下载
  • 三个月内代码免费升级
  • 专业人员在线技术支持
  • 支持按需定制(另付费)
下载代码包
版本发布日期地址
1.0.1 2020-1-3
下载最新版
QQ咨询
2860991437
9+