[PHP开发] 比特币PHP离线交易开发包

[复制链接]
jimi2018 发表于 2018-12-17 10:51:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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,主要代码文件清单如下:
码文件
说明

btctool/src/Wallet.php
离线钱包类,开发包入口

btctool/src/Utxo.php
未消费交易输出类

btctool/src/UtxoBag.php
Utxo集合类

btctool/src/UtxoCollector.php
Utxo收集器接口

btctool/src/CloudUtxoCollector.php
基于第三方服务的Utxo收集器实现

btctool/src/UtxoSelector.php
Utxo筛选器接口

btchtool/src/DefaultUtxoSelector.php
默认的Utxo筛选器实现

btctool/src/Broadcaster.php
交易广播器接口

btctool/src/CloudBroadcaster.php
基于第三方服务的交易广播器实现

btctool/src/Utils.php
常用辅助函数

demo/wallet-init.php
本地钱包初始化

demo/wallet-demo.php
钱包载入、裸交易构造和广播

vendor
第三方依赖包目录

composer.json
composer配置文件
2. 使用说明
BtcTool的入口是Wallet类,基本的使用步骤如下:
  • 创建一个Wallet实例
  • 将私钥加入该Wallet实例
  • 使用Wallet实例的sendTx()方法获取编码后的裸交易
  • 使用Wallet实例的broadcast()方法广播裸交易
示例例代码如下,说明见注释:
<?phprequire('../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);   //广播裸交易
注意:
  • Wallet实例利用钱包中的私钥生成地址列表,并利用这些地址从第三方服务获取utxo信息。
    因此需要钱包中的私钥对应地址在链上有utxo存在,Wallet对象才能够成功构造裸交易。
  • 在调用Wallet对象的sendTx()方法构造裸交易时,可以指定找零地址和手续费,例如:
  $rawtx = $wallet->sendTx($toAddr,$amount,$changeAddr,$fee);
如果未指定后面两个参数,找零地址默认为钱包中第一个私钥对应的地址,手续费默认为10000satoshi(高费率)。
  • 转账目标地址应当与创建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完成

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则