百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

PHP比特币开发入门指南

yuyutoo 2024-11-20 23:56 1 浏览 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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐

史上最全的浏览器兼容性问题和解决方案

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...

平面设计基础知识_平面设计基础知识实验收获与总结
平面设计基础知识_平面设计基础知识实验收获与总结

CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...

2025-02-21 16:01 yuyutoo

写作排版简单三步就行-工具篇_作文排版模板

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

写一个2048的游戏_2048小游戏功能实现

1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...

今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……

  最近的天气暖和得让很多小伙伴们喊“热”!!!  昨天的气温到底升得有多高呢?你家有没有榜上有名?...

CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式

之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...

柠檬科技肖勃飞:大数据风控助力信用社会建设

...

你的自我界限够强大吗?_你的自我界限够强大吗英文

我的结果:A、该设立新的界限...

行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?

行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...

让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华

去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...

2025-02-21 16:00 yuyutoo

今年国家综合性消防救援队伍计划招录消防员15000名

记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...

一起盘点最新 Chrome v133 的5大主流特性 ?

1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...

竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使

style="text-align:center;"data-mce-style="text-align:...

学物理能做什么?_学物理能做什么 卢昌海

作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...

你不知道的关于这只眯眼兔的6个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: