主页 > imtoken钱包怎么登录 > 比特币 utxo 跟踪实现 [PHP]

比特币 utxo 跟踪实现 [PHP]

imtoken钱包怎么登录 2023-01-18 12:08:34

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开发包-汇智网络