主页 > imtoken钱包怎么登录 > 比特币 utxo 跟踪实现 [PHP]
比特币 utxo 跟踪实现 [PHP]
UtxoScanner开发包用于扫描和监控比特币区块链的UTXO,官方下载地址:.
1、开发套件概述
UtxoScanner 开发包功能如下:
UtxoScanner运行于PHP7.1+环境比特币登录入口下载,主要接口、类及相互关系如下图所示:
UtxoScanner的主要代码文件列表,请参考:
2、基本用法
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() 方法返回本次扫描的统计信息对象的结构如下:
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);
3、设置 Utxo 数据库
UtxoScanner 有两个内置的 Utxo 数据库:
如果想用其他方式存储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(...)
);
4、监听 Utxo 事件
使用 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的值为add时,表示这是一个UTXO生成事件,附加字段如下:
当type的值为spend时,表示这是一个UTXO消费事件,附加字段如下:
官方下载地址:比特币UTXO追踪扫描PHP开发包-汇智网络