UtxoScanner - UTXO跟踪监视php开发包
UtxoScanner 开发包用于扫描监听比特币区块链的 UTXO,官方下载地址:http://sc.hubwiz.com/codebag/btx-utxo-scanner/。
1、开发包概述
UtxoScanner开发包特点如下:
- 扫描监听指定任意比特币地址的Utxo产生与消费事件
- 本地管理Utxo,便于查询、裸交易构造和余额统计
- 支持自定义Utxo事件发生时的业务逻辑
UtxoScanner运行于PHP 7.1+环境下,主要接口、类以及相互关系如下图所示:
UtxoScanner的主要代码文件清单如下:
文件路径 | 说明 |
---|---|
btc.php/src/ | UtxoScanner源代码目录 |
btc.php/src/UtxoScanner.php | 比特币Utxo扫描器实现类 |
btc.php/src/IChain.php | 比特币区块链访问接口 |
btc.php/src/ChainRpc.php | 基于RPC API的比特币区块链访问实现类 |
btc.php/src/IUtxoStore.php | Utxo数据库接口 |
btc.php/src/UtxoStoreMemory.php | Utxo数据库接口内存实现类 |
btc.php/src/UtxoStoreSqlite3.php | Utxo数据库接口Sqlite3实现类 |
btc.php/src/Utxo.php | Utxo封装类 |
btc.php/src/IEventListener.php | 事件监听器接口 |
btc.php/src/Utils.php | 辅助工具类 |
demo/ | UtxoScanner演示代码目录 |
demo/scanner-demo.php | UtxoScanner使用演示 |
demo/store-demo.php | utxoStore使用演示 |
demo/rpc-demo.php | RpcClient使用演示 |
vendor/ | 第三方依赖包 |
composer.json | composer配置文件 |
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()
方法返回本次扫描的统计信息对象,其结构如下:
- 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);
3、设置Utxo数据库
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(...) );
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
字段,以及其他附加的字段。
当type
的值为add
时,表明这是一个UTXO生成事件,附加字段如下:
-
utxo:Utxo对象,结构如下:
- txid:交易哈希
- vout:交易输出序号
- value:交易数量,单位:btc
- script:目标公钥脚本
- height:交易所在区块的高度
当type
的值为spend
时,表明这是一个UTXO消费事件,附加字段如下:
- txid:交易哈希
- vout:交易输出序号
官方下载地址:比特币UTXO跟踪扫描PHP开发包 - 汇智网
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云服务器 Centos 7 如何搭建Java Web开发环境?
首选要有一台云服务器,开始部署开发环境,还没有购买的同学,请移至阿里云官网购买(记得领取代金券礼包,希望对你有所帮助!) 准备工作 安装目录 我们创建如下路径/usr/develop,然后在develop目录下面创建java,tomcat和mysql三个目录即可。 配置JDK 理解wget命令 wget命令是一个从网络上下载文件的自由工具,它支持http协议,https协议和ftp协议。因此我们可以通过wget命令来下载JDK。wget的格式:wget 要下载的url。下载的目录为当前执行wget命令的目录。 一.安装 JDK 1.首先查看一下系统是32位的还是64位的 执行: uname -m 2.去Oracle官网下载对应版本的JDK JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 3.下载完后上传到云服务器,然后解压 tar -zxvf jdk-8u181-linux-x64.tar.gz4.将解压后的文件夹剪切到usr/local/jdk1....
- 下一篇
php不支持多线程怎么办
PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编译 PHP 时使用线程安全方式。线程安全多线程是让程序变得不安分的一个因素,在使用多线程之前,首先要考虑线程安全问题:线程安全:线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。在传统多线程中,由于多个线程共享变量,所以可能会导致出现如下问题:存在一个全局数组$arr = array('a');;A线程获取数组长度为1;B 线程获取数组长度为1;A 线程 pop 出数组元素 $a = array_pop($arr); $a = 'a';;B 线程也 pop 数组元素 $b = array_pop($arr); $a = null;;此时 B 线程内就出现了灵异事件,明明数组长度大于0,或没有 pop 出东西;PHP 实现PHP 实现的线程安全主要是使用 TSRM 机制对 全局变量和静态变量进行了隔离,将全局变量和静态...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)