您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“PHP比特幣utxo跟蹤怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“PHP比特幣utxo跟蹤怎么實現(xiàn)”吧!
UtxoScanner 開發(fā)包用于掃描監(jiān)聽比特幣區(qū)塊鏈的 UTXO
UtxoScanner開發(fā)包特點如下:
掃描監(jiān)聽指定任意比特幣地址的Utxo產(chǎn)生與消費事件
本地管理Utxo,便于查詢、裸交易構(gòu)造和余額統(tǒng)計
支持自定義Utxo事件發(fā)生時的業(yè)務邏輯
UtxoScanner運行于PHP 7.1+環(huán)境下,主要接口、類以及相互關系如下圖所示:
UtxoScanner的主要代碼文件清單參見:http://sc.hubwiz.com/codebag/btx-utxo-scanner/
UtxoScanner類是開發(fā)包的入口,調(diào)用其scan()
方法就可以跟蹤指定地址(列表)的utxo。例如,下面的代碼創(chuàng)建一個UtxoScanner實例,并掃描最新區(qū)塊內(nèi)指定地址的utxo:
use BtcTool\UtxoScanner; use BtcTool\ChainRpc; use BtcTool\UtxoStoreSqlite3; $scanner = new UtxoScanner( new ChainRpc('http://user:123456@127.0.0.1:8332'), new UtxoStoreSqlite3('scanner.db') ); $addressList = ['1GMsiunopL5sZuTMaPbCjfwXdJEvC62KSG']; $stats = $scanner->scan($addressList);
scan()
方法返回本次掃描的統(tǒng)計信息對象,其結(jié)構(gòu)如下:
block:掃描的區(qū)塊總數(shù)
tx:掃描的交易總數(shù)
addEvents:本次掃描發(fā)現(xiàn)的新增UTXO總數(shù)
spendEvents:本次掃描發(fā)現(xiàn)的消費UTXO總數(shù)
scan()
方法的原型如下:
function scan($addressList,$startBlockRef='latest',$endBlockRef='latest');
因此,在沒有指定后兩個參數(shù)時,scan()
方法僅掃描最新的區(qū)塊。當需要掃描多個區(qū)塊時,可以指定起止區(qū)塊號。例如,下面的代碼掃描100~1000這901個區(qū)塊:
$stats = $scanner->scan($addressList,100,1000);
UtxoScanner實例會將掃描到的Utxo記錄到本地的sqlite3數(shù)據(jù)庫中,其路徑在創(chuàng)建UtxoStoreSqlite3實例時指定。你可以直接使用SQL訪問這個庫,也可以使用UtxoScanner開發(fā)包里的UtxoStoreSqlite3。例如,下面的代碼提取當前庫中所有可用的UTXO:
use BtcTool\UtxoStoreSqlite3; $store = new UtxoStoreSqlite3('scanner.db'); $utxos = $store->fetch([]); var_dump($utxos);
調(diào)用fetch()
方法時可以傳入目標地址列表,這時將返回這些地址對應的可用UTXO集合。例如:
$addressList = [ '1GMsiunopL5sZuTMaPbCjfwXdJEvC62KSG', '3LiJoKm5e3wLbkaAtZ2E15eEVvkQxG9Z7q' ]; $utxos = $store->fetch($addressList);
UtxoScanner內(nèi)置了兩種Utxo數(shù)據(jù)庫:
UtxoStoreMemory:內(nèi)存庫
UtxoStoreSqlite3:使用Sqlite3
如果要使用其他方式存儲utxo,可以參考上述類的實現(xiàn)代碼進行擴展。
在創(chuàng)建UtxoScanner實例時,指定store
參數(shù)為期望的IUtxoStore實例即可。例如,下面的代碼使用MySQL來保存UTXO(假設實現(xiàn)了相應的類):
use BtcTool\UtxoScanner; use BtcTool\ChainRpc; use BtcTool\UtxoStoreMySQL; $scanner = new UtxoScanner( new ChainRpc('http://user:123456@127.0.0.1:8332'), new UtxoStoreMySQL(...) );
使用UtxoScanner實例的addEventListener()
方法,可以在utxo掃描器發(fā)現(xiàn)新的UTXO時,或者消費已有UTXO時得到通知,如果你需要在發(fā)生UTXO事件時進行額外的處理,可以使用這個方法。
首先需要定義一個實現(xiàn)IEventListener接口的監(jiān)聽類,只需要實現(xiàn)handleEvent()
方法。例如,下面的代碼將在屏幕輸出每一個監(jiān)聽到的Utxo事件的內(nèi)容:
use BtcTool\UtxoScanner; use BtcTool\IEventListener; $scanner = new UtxoScanner(); $scanner->addEventListener(new class implements IEventListener{ function handleEvent($event){ echo "event => " . $event->type . PHP_EOL; var_dump($event); } });
handleEvent()
方法的參數(shù)$event
是一個StdClass
對象,它包括一個type
字段,以及其他附加的字段。
當type
的值為add
時,表明這是一個UTXO生成事件,附加字段如下:
utxo:Utxo對象,結(jié)構(gòu)如下:
txid:交易哈希
vout:交易輸出序號
value:交易數(shù)量,單位:btc
script:目標公鑰腳本
height:交易所在區(qū)塊的高度
當type
的值為spend
時,表明這是一個UTXO消費事件,附加字段如下:
txid:交易哈希
vout:交易輸出序號
到此,相信大家對“PHP比特幣utxo跟蹤怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。