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安装)。
- php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
- php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。汇智网原创翻译,转载请标明出处。
这里是原文
相关推荐
《Inventor开发技术简介—为非程序员定制的入门课程》是一门专为那些不具备编程背景的用户设计的教育课程,旨在帮助他们理解和掌握Autodesk Inventor的开发技术。这门课程不仅关注软件的基本操作,更注重将Inventor...
"程序员的数学4:图论入门" 本书《程序员的数学4:图论入门》是一本面向程序员群体的数学读物,旨在介绍图论的基本概念和应用。图论是一门研究图形和结构的学科,其中节点和边分别表示对象和它们之间的关系。在编程...
第 第 1 章 Java 开发入门 一、填空题 1、 Java EE、Java SE、Java ME 2、 JRE 3、 javac 4、 bin 5、 path、classpath 二、选择题 1、ABCD 2、C 3、D 4、B 5、B 三、简答题 1、 面向对象、跨平台性、健壮性、安全性...
《PHP程序员必备手册》是一个集合了多种编程语言中文手册的压缩包,旨在为PHP开发者提供全方位的参考资料。这个压缩包包括了PHP、JavaScript、CSS和Perl四种语言的中文手册,帮助程序员快速查找和理解相关技术。 ...
C++ STL 程序员 开发指南 pdf
SJY42证书服务器密码机程序员开发使用说明书提供了证书服务器的开发和使用指南,涵盖了证书服务器的架构、证书的生成和管理、证书的验证和撤销等内容。 密码机 密码机是用于加密和解密的设备或软件。SJY42证书...
程序员成长路线图 从入门到优秀
黑马程序员 Linux 从入门到精通配套笔记 本资源汇总了 Linux 操作系统的发展史、安装方法、特点和分支等内容。下面是从文件中提取的知识点: 一、Linux 发展史 1. Linux 的前身是 Unix,于 1968 年由 Multics ...
C++STL程序员开发指南pdf,含目录,内容完整,强烈推荐给大家。
学习STL的快速入门书籍。通过该书可以彻底应用STL
《C++STL程序员开发指南》源代码 C++ STL 源代码 源码
MTK
2020最新-百战程序员-SpringBoot视频教程入门到高级
MySQL是一个流行的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易用性在全球范围内广泛应用于网站开发、数据分析、企业级应用等场景。学习MySQL首先需要理解数据库的基本概念,如数据表、字段、记录和...
程序员在开发项目中需要具备的能力和思考方式对项目的成功至关重要。一个好的程序员不仅需要技术能力,还需要与人沟通和理解客户需求的能力。从提供的文章内容来看,程序员对开发工作的思考主要涉及以下几个方面: ...
C++STL程序员开发指南 C++STL程序员开发指南
Mini-XML程序员开发手册,Version2.5.pdf
黑马程序员——Android移动开发源码
PHP 程序员面试自我介绍需要包括职业道德和工作态度、客户交流沟通能力、思维能力、团队合作和主动性等五个方面,同时还需要具备其他一些技能,包括熟练掌握开发语法、熟悉数据库、具备文档撰写能力等。只有具备这些...