PHP比特币开发入门指南
yuyutoo 2024-11-20 23:56 2 浏览 0 评论
Linux Apache MySQL PHP + 比特币教程。
在本简介中,我们假设你拥有Apache和PHP的GNU/Linux服务器,并且你希望从Web应用程序与比特币网络进行交互。我们假设你有一些比特币的知识和PHP经验。
虽然这是为PHP编写的,但同样的原则适用于其他语言。有关其他语言的信息,请参阅相关的API参考页面。
最简单的入门方法是在守护进程模式下运行比特币,PHP通过本地HTTP请求进行通信。一个名为JSON-RPC的库用于调用bitcoind的各种函数,这些函数将使用JSON对象进行响应。
但是,建议使用列出的替代库之一,因为它们更复杂。
设置比特币
你可以从主页下载比特币守护程序并运行其中一个包含的二进制文件,或者从包含的源代码编译你自己的守护程序。有关配置bitcoind的详细信息,请参阅运行比特币。
在运行bitcoind之前,你需要在比特币数据目录中创建一个配置文件(Linux上的~/.bitcoin/bitcoin.conf):
rpcuser=user
rpcpassword={you MUST pick a unique password to be secure}
如果你错过了这一步,bitcoind会提醒你。
现在运行bitcoind:
$ ./bitcoind
# wait a few seconds for it to start up
$ ./bitcoin-cli getinfo
# various information will be shown. If you get an error, try again until you see some useful output.
$ ./bitcoin-cli help
# get help on commands, note no dash before help
比特币将开始与网络同步并下载完整的区块链副本。截至2012年8月,在此过程中必须下载并验证超过2GB的数据。完成可能需要两个小时或更长时间。当块计数达到当前计数时,你将知道何时完成。
Getinfo(比特币的Hello World版本)
假设比特币已完成初始化过程;从JSON-RPC PHP下载文件jsonRPCClient.php并将其放在Web可访问的位置。
其次,使用以下内容创建一个PHP文件,并使用浏览器访问它并进行测试。
require_once 'jsonRPCClient.php';
$bitcoin = new jsonRPCClient('http://user:password@127.0.0.1:8332/');
echo "<pre>\n";
print_r($bitcoin->getinfo());
echo "</pre>";
注意:jsonRPCClient库使用fopen(),如果从bitcoind收到404或500错误,将抛出一个异常,说“Unable to connect”即无法连接。这可以防止你看到bitcoind生成的错误消息(因为它们以状态404或500发送)。下面列出的替代库在功能上与JSON-RPC PHP类似,但没有此问题。
精度
比特币金额范围从1 Satoshi(0.00000001 BTC)到近2,100,000,000,000,000(21,000,000 BTC)。为避免舍入错误,你必须确保PHP实现支持所有比特币值而不会丢失精度。大多数PHP实现使用具有53位精度的IEEE 64位双精度浮点数,这足以正确表示全部比特币值。
有关详细信息,请参阅正确的资金处理(JSON-RPC)。
如果你的PHP实现不支持64位数字(再次,这是非常罕见的),你必须使用一个版本的bitcoind,它将值作为字符串发送(genjix在http://github.com/genjix/bitcoin维护一个分支)并使用GMP和BC Math库进行涉及比特币金额的所有计算。
帐号
在比特币中,钱被发送到地址,许多地址可以由一个钱包持有。比特币中默认显示的余额是钱包中所有地址中比特币的总和。
再进一步,你可以拥比特币账户。每个帐户都拥有多个地址,其行为类似于迷你比特币。
$ ./bitcoin-cli listaccounts
# show list of accounts and various info for each one
$ ./bitcoin-cli getaccountaddress user889
# get an address to receive money to that is unique for the account user889
$ ./bitcoin-cli getbalance user889
# get the sum of all the money in the addresses owned by the account user889
在你的应用程序中,每个用户都应具有唯一的用户名。然后,你可以使用$ bitcoin->getaccountaddress(“user889”);,查询bitcoind的唯一地址;获取user889的第一个地址。或$ bitcoin->getnewaddress(“user889”);,为user889创建一个新地址。
然后客户存入此地址。
你可以通过$ bitcoin->getbalance(“user889”,4);,来检查该客户的资金。4表示在假设此付款有效之前我们将接受的最低确认数。
如果你将长期使用多个存款和取款帐户,你可能需要考虑在自己的数据库中跟踪用户余额。这简化了应用程序帐户之间的转移,并将你的帐户与比特币钱包分离。
getnewaddress vs getaccountaddress
使用getnewaddress可以使恶意代理难以跟踪流经应用程序的付款,从而有助于提高用户的匿名性。但是,经常运行getnewaddress会导致你的钱包充满许多空地址。
因此,建议以某种方式限制每个用户可以请求的未提供资金的地址的数量。以下是使用会话的示例:
<?php
require_once('jsonRPCClient.php');
$bitcoin = new jsonRPCClient('http://root:root@127.0.0.1:8332/');
# now check for appropriate funds in user account
try {
$username = ...
if(isset($_SESSION['sendaddress']))
$sendaddress = $_SESSION['sendaddress'];
else {
$sendaddress = $bitcoin->getnewaddress($username);
$_SESSION['sendaddress'] = $sendaddress;
}
$balance = $bitcoin->getbalance($username);
}
catch (Exception $e) {
die("<p>Server error! Please contact the admin.</p>");
}
?>
这会在每个新会话开始时创建一个新地址,并将其存储在会话变量中。
RPC的替代Libs
有一些替代的PHP库可以连接到bitcoind RPC,建议使用普通的jsonRPCClient.php类。他们不依赖于magic__call,使用cURL而不是fopen并且有更好的错误处理(并且可以使用composer安装)。
- NboBTC Bitcoind-PHP
- EasyBitcoin-PHP
作者:编程狂魔
链接:https://www.jianshu.com/p/3b649a008832
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关推荐
- TCP协议原理,有这一篇就够了
-
先亮出这篇文章的思维导图:TCP作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点。在此,我将TCP核心的一些问题梳理了一下,希望能帮到各位。001.能不能说一说TC...
- Win10专业版无线网络老是掉线的问题
-
有一位电脑基地的用户,使用...
- 学习计算机网络需要掌握以下几方面基础知识
-
计算机基础知识操作系统:了解常见操作系统(如Windows、Linux)的基本操作和网络配置,例如如何设置IP地址、子网掩码、网关和DNS服务器等,以及如何通过命令行工具(如ping、tr...
- 网络工程师的圣经!世界级网工手绘268张图让TCP/IP直接通俗易懂
-
要把知识通俗地讲明白,真的不容易。——读者说TCP/IP从字面意义上讲,有人可能会认为TCP/IP是指TCP和IP两种协议。实际生活当中有时候也确实就是这两种协议。然而在很多情况下,它只是...
- 三分钟了解通信知识TCP与IP协议(含“通信技术”资料分享)
-
TCP/IPTCP/IP分层模型①应用层...
- 网闸与防火墙:网络安全设备的差异与应用
-
在网络安全领域,网闸(安全隔离网闸,GAP)和防火墙(Firewall)是两类重要的防护设备。尽管它们都服务于网络安全防护,但在设计理念、技术原理、安全效能及适用场景等方面存在显著差异,以下从五个维度...
- S7-300的TCP/IP通信
-
一、首先在项目中创建2个S7-300的站点;二、硬件组态中,设置合适的TCP/IP地址,在同一网段内;...
- 西门子S7-1500 PLC的 MODBUS TCP通信
-
MODBUSTCP使MODBUS_RTU协议运行于以太网,MODBUSTCP使用TCP/IP和以太网在站点间传送MODBUS报文,MODBUSTCP结合了以太网物理网络和网络标准TC...
- 系统规划与管理师新版备考必备:第7章考点思维导图解析
-
备考系统规划与管理师的小伙伴们,福利又来啦!今天为大家带来《系统规划与管理师(第2版)》第7章考点的思维导图,助你高效梳理重点,让备考更有方向!...
- TCP/IP、Http、Socket 有何区别与联系?
-
HTTP协议对应于应用层,Socket则是对TCP/IP协议的封装和应用(程序员层面上)。HTTP是应用层协议,主要解决如何包装数据。而我们平时说的最多的Socket是什么呢?实际上...
- 西门子PLC串口协议与以太网通信协议对比
-
西门子plc品牌众多,通信协议的类型就更多了,具体可分为串口协议和以太网通信协议两大类。...
- 网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别
-
本文引用了作者Fundebug的“一文搞懂TCP与UDP的区别”一文的内容,感谢无私分享。1、引言...
- 程序员必备的学习笔记《TCP/IP详解(一)》
-
为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样...
- 一文读懂TCP/IP协议工作原理和工作流程
-
简述本文主要介绍TCP/IP协议工作原理和工作流程。含义TCP/IP协议,英文全称TransmissionControlProtocol/InternetProtocol,包含了一系列构成互联网...
- 如何在 Windows 10 和 Windows 11 上重置 TCP/IP 堆栈
-
传输控制协议/Internet协议,通常称为TCP/IP,是您的WindowsPC如何与Internet上的其他设备进行通信的关键部分。但是当事情出错时会发生什么?你如何解决它?幸运的...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)