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.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:[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開發包 - 彙智網