文档章节

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

汇智网教程
 汇智网教程
发布于 2018/12/15 12:06
字数 1103
阅读 9
收藏 0
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完成

原文链接:比特币PHP离线交易开发包

© 著作权归作者所有

共有 人打赏支持
汇智网教程
粉丝 13
博文 132
码字总数 125977
作品 0
东城
私信 提问
扣丁学堂区块链培训解析比特币钱包工作原理

  在现如今生活中的钱包是用来放钱的,但是比特币钱包不是用来存放“比特币”的,为什么呢?比特币的所有权是通过数字密钥、比特币地址和数字签名来确立的。数字密钥实际上并不是存储在网络...

扣丁学堂
2018/09/19
0
0
比特币钱包RPC的PHP调用方法

当我们希望在Php开发的网站中加入比特币支付功能时,需要解决的第一个问题,就是如何在Php程序代码中调用比特币钱包的RPC API开发接口来实现我们期望的功能,例如比特币的支付与接收。 例如,...

汇智网教程
2018/09/22
0
0
一个比特币交易流程是如何完成的

本文解释了比特币交易的内容,目的和结果。下面的解释适用于新手和中级比特币用户。 作为加密货币用户,你需要熟悉交易雏形——为了你对这种不断发展的创新有信心,以及作为理解新兴多签名交...

笔阁
2018/10/22
0
0
如何用bitcoinj开发java比特币应用

当你希望使用java开发比特币应用,或者希望应用与比特币对接时,bitcoinj是最佳的选择,它是最早也是目前最成熟的比特币java开发包,bitcoinj包含了比特币规范的大部分实现,例如密钥、地址、...

汇智网教程
01/06
0
0
到底该怎么理解比特币和区块链?

比特币区块链无疑是当今业界的最热门的。通过这篇博客,我将尽力向大家介绍加密货币比特币的概念,以及它如何创造我们称之为区块链的革命性技术。 这个问题经常引起混淆。这篇文章可以快速解...

geek12345
2018/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
1
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部