本篇内容主要讲解“PHP比特币utxo跟踪怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP比特币utxo跟踪怎么实现”吧!
UtxoScanner 开发包用于扫描监听比特币区块链的 UTXO
UtxoScanner开发包特点如下:
扫描监听指定任意比特币地址的Utxo产生与消费事件
本地管理Utxo,便于查询、裸交易构造和余额统计
支持自定义Utxo事件发生时的业务逻辑
UtxoScanner运行于PHP 7.1+环境下,主要接口、类以及相互关系如下图所示:
UtxoScanner的主要代码文件清单参见:http://sc.hubwiz.com/codebag/btx-utxo-scanner/
UtxoScanner类是开发包的入口,调用其scan()
方法就可以跟踪指定地址(列表)的utxo。例如,下面的代码创建一个UtxoScanner实例,并扫描最新区块内指定地址的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()
方法返回本次扫描的统计信息对象,其结构如下:
block:扫描的区块总数
tx:扫描的交易总数
addEvents:本次扫描发现的新增UTXO总数
spendEvents:本次扫描发现的消费UTXO总数
scan()
方法的原型如下:
function scan($addressList,$startBlockRef='latest',$endBlockRef='latest');
因此,在没有指定后两个参数时,scan()
方法仅扫描最新的区块。当需要扫描多个区块时,可以指定起止区块号。例如,下面的代码扫描100~1000这901个区块:
$stats = $scanner->scan($addressList,100,1000);
UtxoScanner实例会将扫描到的Utxo记录到本地的sqlite3数据库中,其路径在创建UtxoStoreSqlite3实例时指定。你可以直接使用SQL访问这个库,也可以使用UtxoScanner开发包里的UtxoStoreSqlite3。例如,下面的代码提取当前库中所有可用的UTXO:
use BtcTool\UtxoStoreSqlite3; $store = new UtxoStoreSqlite3('scanner.db'); $utxos = $store->fetch([]); var_dump($utxos);
调用fetch()
方法时可以传入目标地址列表,这时将返回这些地址对应的可用UTXO集合。例如:
$addressList = [ '1GMsiunopL5sZuTMaPbCjfwXdJEvC62KSG', '3LiJoKm5e3wLbkaAtZ2E15eEVvkQxG9Z7q' ]; $utxos = $store->fetch($addressList);
UtxoScanner内置了两种Utxo数据库:
UtxoStoreMemory:内存库
UtxoStoreSqlite3:使用Sqlite3
如果要使用其他方式存储utxo,可以参考上述类的实现代码进行扩展。
在创建UtxoScanner实例时,指定store
参数为期望的IUtxoStore实例即可。例如,下面的代码使用MySQL来保存UTXO(假设实现了相应的类):
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扫描器发现新的UTXO时,或者消费已有UTXO时得到通知,如果你需要在发生UTXO事件时进行额外的处理,可以使用这个方法。
首先需要定义一个实现IEventListener接口的监听类,只需要实现handleEvent()
方法。例如,下面的代码将在屏幕输出每一个监听到的Utxo事件的内容:
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()
方法的参数$event
是一个StdClass
对象,它包括一个type
字段,以及其他附加的字段。
当type
的值为add
时,表明这是一个UTXO生成事件,附加字段如下:
utxo:Utxo对象,结构如下:
txid:交易哈希
vout:交易输出序号
value:交易数量,单位:btc
script:目标公钥脚本
height:交易所在区块的高度
当type
的值为spend
时,表明这是一个UTXO消费事件,附加字段如下:
txid:交易哈希
vout:交易输出序号
到此,相信大家对“PHP比特币utxo跟踪怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。