天天看點

OmniMon - Omni/USDT交易監聽PHP開發包

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交易的解析:

交易類型代碼 交易類型名稱 備注
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/USDT交易監聽PHP開發包

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代币或

比特币轉賬交易的一般步驟如下:

  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:[email protected]:8332'),
  new CloudPropertyMetaResolver
);           

2.2 添加要監聽的位址

使用Monitor執行個體的

watch()

方法,可以添加要監聽的位址。例如,下面的

代碼添加三個要監聽的位址:

$addressList = [
  '15VSP7X29kR3yoaN2Xv3GQ898JeUp5dAtk',
  '19i2mRRtUeThfFyPd1j1Ui3LVbTFM9sdie',
  '3AqUTUsBkAkDBRM8zoAUbBhPxw8x541cZk'
];
foreach($addressList as $address) $monitor->watch($address);           

2.3 添加交易事件監聽處理器

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:比特币流出,事件結構如下:
    • address:流出位址
    • script:流出位址的公鑰腳本
  • in_omni:omni/usdt代币流入,事件結構如下:
    • sender:發送賬戶對象,結構如下:
      • address:發送賬戶位址
      • script:發送賬戶公鑰腳本
    • reference:接收賬戶對象,結構同上
    • omin:omni交易對象,根據交易類型不同有所差別
  • out_omni:omni/usdt代币流出

2.4 掃描區塊鍊

需要周期性地調用Monitor執行個體的

scanBlocks()

方法來掃描區塊鍊以便跟蹤新的Omni/USDT代币

或比特币交易。scanBlocks()的兩個參數分别用來指定掃描的起始區塊号和結束區塊号,

當使用特殊的 latest字元串時,表示使用最新的區塊。

例如,下面的代碼每隔10分鐘掃描一次最新的區塊:

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

官方下載下傳位址:

Omni/USDT交易監聽PHP開發包 - 彙智網