您好,登錄后才能下訂單哦!
這篇文章主要講解了“PHP開發(fā)包OmniMon怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“PHP開發(fā)包OmniMon怎么使用”吧!
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)系如下圖所示:
Monitor是OmniMon開發(fā)包的入口類,使用Monitor監(jiān)視Omni/USDT代幣或 比特幣轉(zhuǎn)賬交易的一般步驟如下:
創(chuàng)建Monitor
實(shí)例
使用實(shí)例的watch()
方法添加要監(jiān)視的地址,可以多次調(diào)用該方法來 添加多個(gè)要監(jiān)視的地址
使用實(shí)例的addEventListener()
方法添加轉(zhuǎn)賬交易事件監(jiān)聽器,可以多次調(diào)用 該方法來添加不同的監(jiān)聽處理邏輯
定期調(diào)用實(shí)例的scanBlocks()
方法掃描新的區(qū)塊,該方法將自動(dòng)觸發(fā)前面 添加的交易事件監(jiān)聽器
實(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 );
使用Monitor實(shí)例的watch()
方法,可以添加要監(jiān)聽的地址。例如,下面的 代碼添加三個(gè)要監(jiān)聽的地址:
$addressList = [ '15VSP7X29kR3yoaN2Xv3GQ898JeUp5dAtk', '19i2mRRtUeThfFyPd1j1Ui3LVbTFM9sdie', '3AqUTUsBkAkDBRM8zoAUbBhPxw8x541cZk' ]; foreach($addressList as $address) $monitor->watch($address);
使用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ū)別
需要周期性地調(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)注!
免責(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)容。