溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP開發(fā)包OmniMon怎么使用

發(fā)布時(shí)間:2021-11-30 11:25:56 來源:億速云 閱讀:169 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要講解了“PHP開發(fā)包OmniMon怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“PHP開發(fā)包OmniMon怎么使用”吧!

1、開發(fā)包概述

OmniMon開發(fā)包特點(diǎn)如下:

  • 監(jiān)聽任意指定地址發(fā)生的Omni/USDT代幣轉(zhuǎn)入/轉(zhuǎn)出交易

  • 監(jiān)聽任意指定地址的比特幣轉(zhuǎn)入/轉(zhuǎn)出交易

  • 自定義代幣交易發(fā)生時(shí)的業(yè)務(wù)邏輯

OmniMon目前可以監(jiān)聽四種類型的交易事件:

  • 比特幣流入事件:當(dāng)比特幣流入監(jiān)聽地址時(shí)觸發(fā)

  • 比特幣流出事件:當(dāng)比特幣流出監(jiān)聽地址時(shí)觸發(fā)

  • Omni/USDT代幣流入事件:當(dāng)Omni/USDT代幣轉(zhuǎn)入監(jiān)聽地址時(shí)觸發(fā)

  • Omni/USDT代幣流出事件:當(dāng)Omni/USDT代幣轉(zhuǎn)出監(jiān)聽地址時(shí)觸發(fā)

OmniMon支持所有類型的Omni Layer交易的解析。

OmniMon運(yùn)行于PHP 7.1+環(huán)境下,主要類以及其關(guān)系如下圖所示:

PHP開發(fā)包OmniMon怎么使用

2、基本使用方法

Monitor是OmniMon開發(fā)包的入口類,使用Monitor監(jiān)視Omni/USDT代幣或 比特幣轉(zhuǎn)賬交易的一般步驟如下:

  1. 創(chuàng)建Monitor實(shí)例

  2. 使用實(shí)例的watch()方法添加要監(jiān)視的地址,可以多次調(diào)用該方法來 添加多個(gè)要監(jiān)視的地址

  3. 使用實(shí)例的addEventListener()方法添加轉(zhuǎn)賬交易事件監(jiān)聽器,可以多次調(diào)用 該方法來添加不同的監(jiān)聽處理邏輯

  4. 定期調(diào)用實(shí)例的scanBlocks()方法掃描新的區(qū)塊,該方法將自動(dòng)觸發(fā)前面 添加的交易事件監(jiān)聽器

2.1 創(chuàng)建Monitor實(shí)例對(duì)象

實(shí)例化Monitor需要傳入兩個(gè)參數(shù),分別用于訪問區(qū)塊鏈和解析Omni代幣元數(shù)據(jù)。 例如,下面的代碼利用一個(gè)ChainRpc對(duì)象和一個(gè)CloudPropertyMetaResolver對(duì)象 來創(chuàng)建Monitor實(shí)例:

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 添加要監(jiān)聽的地址

使用Monitor實(shí)例的watch()方法,可以添加要監(jiān)聽的地址。例如,下面的 代碼添加三個(gè)要監(jiān)聽的地址:

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

2.3 添加交易事件監(jiān)聽處理器

使用Monitor實(shí)例的addEventListener()方法,添加自定義的處理邏輯。 例如,下面的代碼定義一個(gè)監(jiān)聽接口實(shí)現(xiàn)類UtxoSaver,它負(fù)責(zé)將新發(fā)現(xiàn)的UTXO 存入數(shù)據(jù)庫:

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目前支持四種事件,其事件對(duì)象的結(jié)構(gòu)也有不同:

  • in_btc:比特幣流入,事件結(jié)構(gòu)如下:

    • height:區(qū)塊高度

    • txid:交易ID

    • vout:交易輸出序號(hào)

    • value:交易金額,單位:satoshi

    • address:流入地址

    • script:流入地址的公鑰腳本

  • out_btc:比特幣流出,事件結(jié)構(gòu)如下:

    • height:區(qū)塊高度

    • txid:交易ID

    • vout:交易輸出序號(hào)

    • value:交易金額,單位:satoshi

    • address:流出地址

    • script:流出地址的公鑰腳本

  • in_omni:omni/usdt代幣流入,事件結(jié)構(gòu)如下:

    • address:發(fā)送賬戶地址

    • script:發(fā)送賬戶公鑰腳本

    • height:區(qū)塊高度

    • txid:交易ID

    • sender:發(fā)送賬戶對(duì)象,結(jié)構(gòu)如下:

    • reference:接收賬戶對(duì)象,結(jié)構(gòu)同上

    • omin:omni交易對(duì)象,根據(jù)交易類型不同有所區(qū)別

  • out_omni:omni/usdt代幣流出

    • address:發(fā)送賬戶地址

    • script:發(fā)送賬戶公鑰腳本

    • height:區(qū)塊高度

    • txid:交易ID

    • sender:發(fā)送賬戶對(duì)象,結(jié)構(gòu)如下:

    • reference:接收賬戶對(duì)象,結(jié)構(gòu)同上

    • omin:omni交易對(duì)象,根據(jù)交易類型不同有所區(qū)別

2.4 掃描區(qū)塊鏈

需要周期性地調(diào)用Monitor實(shí)例的scanBlocks()方法來掃描區(qū)塊鏈以便跟蹤新的Omni/USDT代幣 或比特幣交易。scanBlocks()的兩個(gè)參數(shù)分別用來指定掃描的起始區(qū)塊號(hào)和結(jié)束區(qū)塊號(hào), 當(dāng)使用特殊的 latest字符串時(shí),表示使用最新的區(qū)塊。

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

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

感謝各位的閱讀,以上就是“PHP開發(fā)包OmniMon怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)PHP開發(fā)包OmniMon怎么使用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI