PHP程序员开发比特币介绍

栏目: PHP · 发布时间: 6年前

内容简介:Linux在本简介中,我们假设你拥有Apache和PHP的GNU/Linux服务器,并且你希望从Web应用程序与比特币网络进行交互。我们假设你有一些比特币的知识和PHP经验。虽然这是为PHP编写的,但同样的原则适用于其他语言。有关其他语言的信息,请参阅相关的

Linux A pache M ySQL P HP + 比特币教程。

在本简介中,我们假设你拥有Apache和 PHP 的GNU/Linux服务器,并且你希望从Web应用程序与比特币网络进行交互。我们假设你有一些比特币的知识和PHP经验。

虽然这是为PHP编写的,但同样的原则适用于其他语言。有关其他语言的信息,请参阅相关的 API参考页面 )。

最简单的入门方法是在守护进程模式下运行比特币,PHP通过本地HTTP请求进行通信。一个名为 JSON-RPC 的库用于调用bitcoind的各种函数,这些函数将使用 JSON对象 进行响应。

但是,建议使用列出的 替代库 之一,因为它们更复杂。

设置比特币http://blog.hubwiz.com/2018/10/07/bitcoin-php-intro/#more

你可以从 主页 下载比特币守护程序并运行其中一个包含的二进制文件,或者从包含的源代码编译你自己的守护程序。有关配置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 维护一个分支)并使用 GMPBC 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进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在 Java 代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、 mongodb 、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • python以太坊,主要是针对 python 工程师使用web3.py进行区块链以太坊开发的详解。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

汇智网原创翻译,转载请标明出处。这里是 原文


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

法律论证理论

法律论证理论

罗伯特·阿列克西 / 舒国滢 / 中国法制出版社 / 2002-12-01 / 30.00

阿列克西的著作探讨的主要问题是如法律裁决之类的规范性陈述如何以理性的方式证立。阿列克西将规范性陈述的证立过程看作实践商谈或“实践言说”,而将法律裁决的证立过程视为“法律言说” 。由于支持法律规范的法律商谈是普遍实践言说的特定形式,所以法律论证理论应当立基于这种一般理论。 在阿列克西看来,如果裁决是理性言说的结果,那么这一规范性陈述就是真实的或可接受的。其基本观念在于法律裁决证立的合理性取决于......一起来看看 《法律论证理论》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具