比特币PHP离线交易开发包

hubwiz · · 2339 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

**BtcTool**是一个基于第三方服务和离线裸交易实现的PHP比特币应用开发包,适合不希望部署本地 节点旳PHP开发者,开发包主要包含以下特性: - 利用第三方服务获取指定地址的utxo集合 - 离线生成消费裸交易 - 利用第三方服务广播裸交易 BtcTool目前支持的第三方服务包括,并且可以非常简单进行扩展: - blockchain.info - btc.com BtcTool下载地址:[http://sc.hubwiz.com/codebag/btc-php-lib/](http://sc.hubwiz.com/codebag/btc-php-lib/?affid=1217studygolang) ### 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**类,基本的使用步骤如下: 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完成

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2339 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传