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的数据。完成可能需要两个小时或更长时间。当块计数达到当前计数时,你将知道何时完成。
假设比特币已完成初始化过程;从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
可以使恶意代理难以跟踪流经应用程序的付款,从而有助于提高用户的匿名性。但是,经常运行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>");
}
?>
这会在每个新会话开始时创建一个新地址,并将其存储在会话变量中。
有一些替代的PHP库可以连接到bitcoind RPC,建议使用普通的jsonRPCClient.php类。他们不依赖于magic__call,使用cURL而不是fopen并且有更好的错误处理(并且可以使用composer安装)。
如果你希望快速掌握使用Php对接比特币钱包的方法,可以访问:php比特币开发教程
这里是原文
php bitcoin programmer mysql linux apache
Original url: Access
Created at: 2018-10-10 14:28:47
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论