OmniMon - Omni/USDT及比特幣交易監聽PHP開發包

OmniMon開發包用於監聽Omni/USDT代幣以及比特幣的轉帳交易,官方下載地址: http://sc.hubwiz.com/codebag/omnimon-php/php

一、開發包概述

OmniMon開發包特色以下:數據庫

  • 監放任意指定地址發生的Omni/USDT代幣轉入/轉出交易
  • 監放任意指定地址的比特幣轉入/轉出交易
  • 自定義代幣交易發生時的業務邏輯

OmniMon目前能夠監聽四種類型的交易事件:區塊鏈

  • 比特幣流入事件:當比特幣流入監聽地址時觸發
  • 比特幣流出事件:當比特幣流出監聽地址時觸發
  • Omni/USDT代幣流入事件:當Omni/USDT代幣轉入監聽地址時觸發
  • Omni/USDT代幣流出事件:當Omni/USDT代幣轉出監聽地址時觸發

OmniMon支持全部類型的Omni Layer交易的解析。this

OmniMon運行於PHP 7.1+環境下,主要類以及其關係以下圖所示:code

OmniMon的主要代碼文件清單參見:http://sc.hubwiz.com/codebag/omnimon-php/對象

二、基本使用方法

Monitor是OmniMon開發包的入口類,使用Monitor監視Omni/USDT代幣或 比特幣轉帳交易的通常步驟以下:blog

  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 存入數據庫:ip

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);
}

官方下載地址:Omni/USDT交易監聽PHP開發包 - 匯智網

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息