对接比特币钱包的PHP开发包

BtcTool是一个基于第三方服务和离线裸交易实现的PHP比特币应用开发包,适合不希望部署本地 节点旳PHP开发者,开发包主要包含以下特性:

  • 利用第三方服务获取指定地址的utxo集合
  • 离线生成消费裸交易
  • 利用第三方服务广播裸交易

BtcTool目前支持的第三方服务包括,并且可以非常简单进行扩展:

  • blockchain.info
  • btc.com

BtcTool下载地址:http://sc.hubwiz.com/codebag/btc-php-lib/

1. 代码清单

BtcTool运行在**Php 7.1+**环境下,当前版本1.0.0,主要代码文件清单如下:

<table class="table table-striped">   
  <thead>     
    <tr><th>代码文件</th><th>说明</th></tr>   
  </thead>   
  <tbody>     
    <tr><td>btctool/src/Wallet.php</td><td>离线钱包类,开发包入口</td></tr>     
    <tr><td>btctool/src/Utxo.php</td><td>未消费交易输出类</td></tr>     
    <tr><td>btctool/src/UtxoBag.php</td><td>Utxo集合类</td></tr>     
    <tr><td>btctool/src/UtxoCollector.php</td><td>Utxo收集器接口</td></tr>     
    <tr><td>btctool/src/CloudUtxoCollector.php</td><td>基于第三方服务的Utxo收集器实现</td></tr>     
    <tr><td>btctool/src/UtxoSelector.php</td><td>Utxo筛选器接口</td></tr>     
    <tr><td>btchtool/src/DefaultUtxoSelector.php</td><td>默认的Utxo筛选器实现</td></tr>     
    <tr><td>btctool/src/Broadcaster.php</td><td>交易广播器接口</td></tr>     
    <tr><td>btctool/src/CloudBroadcaster.php</td><td>基于第三方服务的交易广播器实现</td></tr>     
    <tr><td>btctool/src/Utils.php</td><td>常用辅助函数</td></tr>     
    <tr><td>demo/wallet-init.php</td><td>本地钱包初始化</td></tr>     
    <tr><td>demo/wallet-demo.php</td><td>钱包载入、裸交易构造和广播</td></tr>     
    <tr><td>vendor</td><td>第三方依赖包目录</td></tr>     
    <tr><td>composer.json</td><td>composer配置文件</td></tr>   
  </tbody> 
</table>

2. 使用说明

BtcTool的入口是Wallet类,基本的使用步骤如下:

  1. 创建一个Wallet实例
  2. 将私钥加入该Wallet实例
  3. 使用Wallet实例的**sendTx()**方法获取编码后的裸交易
  4. 使用Wallet实例的**broadcast()**方法广播裸交易

示例例代码如下,说明见注释:

<?php
require('../vendor/autoload.php');

use BtcTool\Wallet;            //引入开发包

$wallet = new Wallet('testnet');  //创建钱包,主网传入 mainnet

$prvKey = '...';                 //向钱包中添加私钥,可添加多个
$wallet->addKey($prvKey);

$toAddr = 'mgYPLmNuZymK...e2XUNF6VFnT'   //地址应当与testnet/mainnet保持一致
$amount = 10000;                //单位:satoshi
$rawtx = $wallet->sendTx($toAddr,$amount);  //构造裸交易,返回16进制字符串

$ret = $wallet->broadcast($rawtx);   //广播裸交易

注意:

  1. Wallet实例利用钱包中的私钥生成地址列表,并利用这些地址从第三方服务获取utxo信息。 因此需要钱包中的私钥对应地址在链上有utxo存在,Wallet对象才能够成功构造裸交易。
  2. 在调用Wallet对象的sendTx()方法构造裸交易时,可以指定找零地址和手续费,例如:
$rawtx = $wallet->sendTx($toAddr,$amount,$changeAddr,$fee);

如果未指定后面两个参数,找零地址默认为钱包中第一个私钥对应的地址,手续费默认为 10000satoshi(高费率)。 3. 转账目标地址应当与创建Wallet对象时指定的链ID一致,例如mainnet的p2pkh地址,前缀应当为1

3. 主要模型

3.1 UtxoCollector接口

利用钱包地址列表,获取候选UTXO。

接口方法:

  • collect():提取候选UTXO,返回TUXO集合

当前实现类:

  • CloudUtxoCollector

3.2 UtxoSelector接口

根据目标金额从候选UTXO中选择可消费UTXO

接口方法:

  • select():选择可消费UTXO,返回UtxoBag对象

当前实现类:

  • DefaultUtxoSelector

3.3 Broadcaster接口

裸交易广播器

接口方法:

  • broadcast():广播裸交易

当前实现类:

  • CloudBroadcaster

3.4 Wallet类

管理私钥、地址和脚本,同时提供构造和广播裸交易的方法

主要方法:

  • ::load(): 静态方法,利用硬盘的钱包文件构造Wallet对象
  • addKey():添加私钥
  • save():将Wallet对象保存到钱包文件
  • sendTx():构造裸交易,返回裸交易码流,该方法可自动搜索可用UTXO集合
  • broadcast():广播裸交易,调用Broadcaster完成

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏米扑专栏

PHP 获取 ping 时间

linux info :  Array ( [0] => PING 115.29.237.28 (115.29.237.28) 56(84) bytes of ...

17230
来自专栏米扑专栏

PHP 获取网页标题(title)、描述(description)、关键字(keywords)等meta信息

米扑导航在收集网站、验证网站时,需要采集网页标题(title)、描述(description)、关键字(keywords)等meta信息

90250
来自专栏米扑专栏

Nginx 重定向所有子域名到www

vim .htaccess  或  vim  /var/www/html/.htaccess

24940
来自专栏米扑专栏

curl 查看 HTTP Header 响应头信息

curl 查看 HTTP Header 响应头信息,可参见米扑博客:curl 查看 HTTP Header 响应头信息

79330
来自专栏JetpropelledSnake

Web安全学习笔记之Kali部署DVWA和OWASPBWA

kali安装完成,下面要进行实战操作了,喵~~(OWASPBWA请直接跳到第八部分)

95440
来自专栏米扑专栏

PHP 使用 Redis

开始在 PHP 中使用 Redis 前, 需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。

18120
来自专栏米扑专栏

CentOS 7 安装 TinyProxy 代理服务器

米扑科技,是一家专注互联网金融和大数据挖掘的初创互联网公司,正式注册成立于2016年9月,总部位于北京市海淀区中关村核心功能区。

1.1K30
来自专栏米扑专栏

Shell curl 和 wget 使用代理IP

Linux Shell 提供两个非常实用的命令来爬取网页,它们分别是 curl 和 wget

29230
来自专栏米扑专栏

米扑科技的开源项目:sitemap-php 自动生成网站地图

米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml)

28350
来自专栏csxiaoyao

PHP表单处理与文件保存

在php中 能够通过$_FILE 获取上传的文件 * 浏览器端部分代码() * 假定浏览器在form表单中如下标签 * 注1form...

29630

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励