赞
踩
原文:
zh.annas-archive.org/md5/2feb12244d893eae70a77f3f952c5da5
译者:飞龙
在本书中,您将介绍比特币和区块链,以及如何参与比特币生态系统。您将了解比特币及其特性、区块链以及两者如何共同工作。您还将学习如何使用 Pi 比特币工具来用 Python 编程比特币。您将学习如何使用 Python 以编程方式与区块链 API 进行交互,以及比特币挖矿以及如何开始进行。我们还将探讨比特币交易机器人。本书还涉及探索和分析比特币生态系统中产生的大量数据;如何获取、清理、操作和可视化比特币价格数据;以及如何使用 Python 的数据分析工具分析比特币骰子游戏的数据。
任何有一些 Python 经验的人都可以从本书中受益,他们希望探索 Python 比特币编程并开始构建基于比特币的 Python 应用程序。
您可以从www.packtpub.com的帐户中下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,以便文件直接发送到您的邮箱。
您可以按照以下步骤下载代码文件:
登录或注册www.packtpub.com。
选择“支持”选项卡。
单击“代码下载和勘误”。
在搜索框中输入书名,然后按照屏幕上的说明操作。
下载文件后,请确保使用最新版本的解压或提取文件夹:
WinRAR/7-Zip 适用于 Windows
Zipeg/iZip/UnRarX 适用于 Mac
7-Zip/PeaZip 适用于 Linux
本书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/Hands-On-Bitcoin-Programming-with-Python
。如果代码有更新,将在现有的 GitHub 存储库上进行更新。
我们还提供了来自我们丰富书籍和视频目录的其他代码包,可在**github.com/PacktPublishing/
**上找到。来看看吧!
我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图片。您可以在这里下载:www.packtpub.com/sites/default/files/downloads/HandsOnBitcoinProgrammingwithPython_ColorImages.pdf
。
本书中使用了许多文本约定。
CodeInText
:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。这是一个例子:“使用privtopub
函数从这些私钥创建三个公钥。”
代码块设置如下:
# Generate Public Key
my_public_key = privtopub(my_private_key)
print("Public Key: %s\n" % my_public_key)
任何命令行输入或输出都以以下方式编写:
pip install bitcoin
粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以这种方式出现在文本中。这是一个例子:“屏幕截图显示了统计数据(DATA | Stats)”
警告或重要提示会出现在这样的样式中。提示和技巧会出现在这样的样式中。
本章重点介绍比特币、其特点以及我们如何参与比特币生态系统。比特币生态系统由用户获取、花费和发送比特币钱包来运行。为了理解本章的概念,你应该至少对你所使用的计算机上的命令行有基本的了解,并且你的计算机上应该安装了 Python 3.x。
在本章中,我们将探讨以下主题:
介绍比特币及其特点
区块链的介绍
比特币和区块链的属性
如何获取比特币钱包
包括获取、发送和花费在内的不同形式的比特币钱包
在本节中,我们将探讨以下主题:
比特币
比特币的用途
区块链
比特币和区块链的属性
比特币是一种数字货币。这意味着它只存在于电子记录中,与实体货币不同,你无法用手持有它。你可以使用比特币发送和接收货币(就像其他方法一样),以及用比特币支付物品和服务。比特币可以与传统货币互换。
有交易所可以购买和出售比特币。还有许多其他数字货币,但比特币是第一个也是最受欢迎的。比特币使用点对点技术运作,没有中央机构或银行管理交易,比特币的发行是由网络共同进行的。
比特币是开源的——它的设计是公开的;没有人拥有或控制比特币,每个人都可以使用它。比特币是数字化的和去中心化的。历史上第一次,人们可以在没有中间人的情况下交换价值,这意味着对资金的更大控制和更低的费用。
它是一种加密货币,这意味着它是经过设计保护的。
使用比特币有很多优势。其中一些如下:
快速和简便的支付:使用比特币进行支付非常简单和快速。你不必担心使用哪种软件。比特币网络从不休息,即使在假期也是如此。国际间的支付也非常简单;没有银行让任何人等待三个工作日,也没有额外费用,也没有最低或最高金额的特殊限制。
隐私:可以使用比特币进行支付而不分享任何个人信息;不需要注册或分享任何卡信息。事实上,甚至可以在不透露身份的情况下进行支付,几乎就像使用实体货币一样。但需要注意的是,保护隐私可能需要一些努力。
微不足道的交易费用:使用比特币进行支付时,交易费用非常少或微不足道。接收比特币时没有费用,拥有多个钱包可以控制在花费时支付多少费用。大多数钱包都有合理的默认费用,更高的费用可以加快交易的确认。费用与转账金额无关,因此可以用相同的费用发送 10 万比特币和发送 1 比特币。
安全:比特币是通过电子方式创建和持有的,但没有涉及信用卡号,因此没有人可以盗取你的钱。交易使用军用级别的加密技术,非常保密。比特币将为你提供对资金的完全访问和高水平的保护,几乎可以防范所有类型的欺诈行为。
多重签名:比特币的多重签名功能允许企业通过只有一组人授权交易才能花费比特币来完全控制他们的支出。
对开发者来说很好:对于开发者来说,比特币是最简单的支付系统。有许多第三方支付处理服务提供 API。我们不需要在服务器上存储比特币。如果不使用任何第三方 API,可以直接将比特币节点集成到应用程序中,使其成为自己的银行和支付处理器。
简单来说,区块链是一个数字账本。它是比特币交易的公共记录,按时间顺序排列。它是一个基于比特币协议的无许可、分布式数据库,维护着不断增长的交易数据记录列表。它是分布式的,因此每个参与者都有整个区块链的副本。区块链在所有比特币用户之间共享。
它用于验证比特币交易的永久性,并防止双重支付。它是安全和不可变的,也经过了防篡改和修改,即使是数据存储节点的运营者也无法修改。
每个区块链记录都经过密码验证,主机运行作为数据存储节点的机器。区块链由区块组成。区块是区块链中包含和确认许多等待交易的记录,如www.blockchain.com/explorer
所示:
大约每十分钟,通过挖矿,一个包含交易的新区块被附加到区块链上。它是一个名为比特币区块链的文件,存储在世界各地数千台计算机上,甚至可能存储在你家里的个人电脑上。该文件包含有关所有比特币交易的数据,即从一个账户向另一个账户支付比特币的数据。
这通常被称为账本,类似于银行账本,用于记录付款。
比特币和区块链都具有以下相似的属性:
区块链是比特币背后的技术。它就像是所有比特币交易的数据库,并自第一笔交易以来一直保留着所有比特币交易的记录。区块链技术最初和最广为人知的应用是比特币的交易公共账本。然而,数字货币并不是区块链技术的唯一用途。
区块链是一个无信任的系统,可以用来进行各种交易,比如数字合同签署。区块链技术可以用来创建一个永久的公开透明的账本系统,用于编制销售数据,通过认证版权注册来存储权利数据等等。
甚至还有一个建立在区块链技术上的数字国家,名为Bitnation。
要开始使用比特币进行支付,我们需要一个比特币钱包。但是,在创建钱包之前,我们应该了解以下事项:
安全性:我们应该采取措施保护我们的钱包。不同的钱包有许多不同的功能。您应该评估所有这些功能,并选择最适合您的功能。
波动性:比特币价格波动很大,取决于市场条件。
还有一些其他需要注意的事项。有关更多信息,请参阅bitcoin.org/en/you-need-to-know
。
比特币钱包有很多不同的形式。以下是其中一些:
有智能手机应用钱包,有在线网络钱包——例如,blockchain.info 和 coinbase.info——有基于 macOS、Linux 和 Windows 操作系统的桌面钱包,还有专用的基于硬件的钱包。
在线网络钱包可以从任何网络浏览器和任何操作系统访问,因此它相当独立于平台:
最受欢迎的之一是 coinbase.info,您可以在那里购买和发送比特币。
还有一些其他的,比如 BitGo、BTC.com、Coin.Space、GreenAddress 等。还有移动钱包可以从智能手机上使用。它们适用于 Android 手机、Windows 手机、黑莓手机和 iOS 手机。一些最受欢迎的是 breadwallet、Coin.Space、Mycelium 等。
还有一些适用于所有操作系统的台式电脑的钱包。一些流行的钱包包括比特币核心、GreenAddress 和 BitGo 等。
比特币钱包可能需要特定的硬件解决方案,例如 Trezor。Trezor 是一个硬件钱包,具有更高的安全性,我们甚至可以签署交易,连接到在线设备,并从该钱包中花费比特币。它是一个独立的设备,因此更安全,不太容易被黑客攻击。还建议您为大量比特币使用比特币冷存储。比特币冷存储可以脱机保存,例如在纸币钱包中。为此,您可以从bitaddress.org获取比特币地址,然后将其脱机存储详细信息。
比特币可以从交易网站购买。交易网站的一个例子是 Coinbase.info,而 bitcoin.org 列出了许多这样的交易网站。一些是全球运营的,而一些是特定于某个国家或地区的,具体取决于该国家的法律。世界各地都有可用的交易所。例如,最受欢迎的之一是 Coinbase.com。在这里,可以发送和出售比特币,并且可以查看您的帐户详细信息,其中包含您持有的比特币信息。
您还可以从比特币 ATM 购买比特币。找到您当地比特币 ATM 的最佳网站之一是coinatmradar.com/
。例如,以下屏幕截图显示了美国的地图,您可以在上面看到所有可用的比特币 ATM,您可以在那里购买比特币:
您还可以与其他用户面对面购买比特币。有兴趣出售比特币的人的位置可以在localbitcoins.com/
找到。在下面的屏幕截图中,我们可以看到所有有兴趣出售比特币的美国人。其他用户可以从该网站购买比特币。您还可以向有兴趣购买比特币的其他用户出售比特币:
还有很多地方可以在线使用比特币购买产品和服务。一个可以找到这些地方的网站是spendabit.co/
。从这个网站上,我们可以搜索接受比特币付款的卖家的产品。
例如,当我们在搜索栏中搜索烤面包机时,它将显示所有愿意接受比特币付款的卖家的列表。
寻找接受比特币的企业的另一个地方是99bitcoins.com
。该网站包含接受比特币付款的公司列表。如下列表所示,列出了许多知名公司的名称:
WordPress:允许用户创建博客
Overstock:在线零售商
Subway:接受比特币
Microsoft:用户可以在 Windows 商店用比特币购买内容
Reddit:使用比特币购买高级功能
如果您有兴趣寻找接受比特币的本地企业,您可以在 coinmap.org 上搜索。
在本章中,我们介绍了比特币和区块链技术,以及我们如何开始在比特币生态系统中发挥作用。我们了解了比特币及其特性,区块链,比特币和区块链如何协同工作,以及它们之间的区别。我们还探讨了如何获取比特币钱包以及如何开始使用它。
我们学会了如何获取和发送比特币,并了解了在线和离线获取比特币的各种途径。我们看了如何发送比特币,并了解了一些可以花费比特币购买产品和服务的地方。
在下一章中,我们将以编程方式探索比特币和区块链 API,并了解如何开始挖掘比特币。
本章重点介绍使用树莓派比特币工具来使用 Python 编程比特币,并以编程方式与区块链 API 进行交互。读者还将对挖掘比特币及其初始阶段的过程有一个大致的了解。
在本章中,我们将学习以下主题:
使用 Python 编程比特币
创建多重签名比特币地址
使用 Python 进行区块链 API 编程
安装 Blockchain.info
Python 库
学习挖掘比特币
如何挖掘比特币
挖掘比特币的困难增加
在本节中,我们将介绍以下主题:
树莓派比特币工具库及如何开始使用它
如何生成私钥和公钥
如何从生成的私钥和公钥创建一个简单的比特币地址
要使用 Python 开始比特币,必须在系统中安装 Python 3.x 和名为 Pi 比特币工具的比特币 Python 库。
要安装 Pi 比特币工具库,请打开命令行程序并执行以下命令:
pip install bitcoin
这个库最好的地方是,您不需要在计算机上安装比特币节点就可以开始使用它。
此库连接到比特币网络,并从诸如 Blockchain.info 之类的地方获取数据。
我们将首先用 Python 编写比特币的等价物。在hello_bitcoin.py
脚本中,使用 Python 创建了一个新的比特币地址的演示。
按照以下步骤运行程序:
#!/usr/bin/env python
'''
Title - Hello Bitcoin
This program demonstrates the creation of
- private key,
- public key
- and a bitcoin address.
'''
# import bitcoin
from bitcoin import *
my_private_key = random_key()
print("Private Key: %s\n" % my_private_key)
使用私钥生成公钥。通过将生成的私钥传递给privtopub
函数来执行此步骤,如下所示:
# Generate Public Key
my_public_key = privtopub(my_private_key)
print("Public Key: %s\n" % my_public_key)
现在,使用公钥生成比特币地址。通过将生成的公钥传递给pubtoaddr
函数来实现:
# Create a bitcoin address
my_bitcoin_address = pubtoaddr(my_public_key)
print("Bitcoin Address: %s\n" % my_bitcoin_address)
以下屏幕截图显示了生成的私钥、公钥和比特币地址:
比特币地址
比特币地址是一次性令牌。就像人们使用电子邮件地址发送和接收电子邮件一样,您可以使用此比特币地址发送和接收比特币。但与电子邮件地址不同,人们有许多不同的比特币地址,每个交易应使用唯一的地址。
多重签名地址是与多个私钥关联的地址;因此,我们需要创建三个私钥。
按照以下步骤创建多重签名比特币地址:
#!/usr/bin/env python ''' Title - Create multi-signature address This program demonstrates the creation of Multi-signature bitcoin address. ''' # import bitcoin from bitcoin import * # Create Private Keys my_private_key1 = random_key() my_private_key2 = random_key() my_private_key3 = random_key() print("Private Key1: %s" % my_private_key1) print("Private Key2: %s" % my_private_key2) print("Private Key3: %s" % my_private_key3) print('\n')
privtopub
函数从这些私钥创建三个公钥:# Create Public keys
my_public_key1 = privtopub(my_private_key1)
my_public_key2 = privtopub(my_private_key2)
my_public_key3 = privtopub(my_private_key3)
print("Public Key1: %s" % my_public_key1)
print("Public Key2: %s" % my_public_key2)
print("Public Key3: %s" % my_public_key3)
print('\n')
mk_ multi-sig_script
函数来创建multisig
。将生成的multisig
传递给addr
脚本函数以创建多重签名比特币地址。# Create Multi-signature address
my_multi_sig = mk_multisig_script(my_private_key1, my_private_key2, my_private_key3, 2,3)
my_multi_address = scriptaddr(my_multi_sig)
print("Multi signature address: %s" % my_multi_address)
以下屏幕截图显示了multisig
比特币地址的输出:
多重签名地址在组织中非常有用,因为没有单个个人被信任授权花费比特币。
您还可以查看现有比特币地址的交易历史。我们将首先从 Blockchain.info 获取有效地址。
以下屏幕截图显示了比特币区块的复制地址:
将复制的地址传递给history
函数,如下面的代码所示,以及输出以获取比特币地址的历史记录,包括交易信息:
!/usr/bin/env python
'''
Title - Bitcoin Transaction History
This program demonstrates listing history of a bitcoin address.
'''
# import bitcoin
from bitcoin import *
#View address transaction history
a_valid_bitcoin_address = '329e5RtfraHHNPKGDMXNxtuS4QjZTXqBDg'
print(history(a_valid_bitcoin_address))
Blockchain.info 是最受欢迎的区块链和比特币网络浏览器和钱包提供商之一。通过网络,您可以查看区块级别并查看所有已发生的交易。例如,通过转到特定的区块—即区块#536081—您可以查看所有交易,以及一些其他信息,如以下截图所示:
以下截图显示了统计数据(DATA | Stats)。这很棒,也很有用;但是,对于基于此数据构建应用程序或进行分析的开发人员来说,以编程方式获取这些数据非常重要:
以下截图显示了市场数据(DATA | Markets):
以下是安装blockchain
Python 库的步骤:
在计算机上打开命令行程序。
运行pip install blockchain
命令来安装blockchain
库。
以下截图显示了比特币的安装:
以下步骤显示了比特币汇率的方法:
blockchain
库中导入exchangerates
类:#!/usr/bin/env python
# import blockchain library
from blockchain import exchangerates
get_ticker
方法,它返回字典对象中的汇率数据。调用此方法并保存结果对象。我们拥有的ticker
字典对象具有货币符号作为键:# get the Bitcoin rates in various currencies
ticker = exchangerates.get_ticker()
p15min
最小值来获取每种货币的最新比特币汇率:# print the Bitcoin price for every currency
print("Bitcoin Prices in various currencies:")
for k in ticker:
print(k, ticker[k].p15min)
以下截图显示了各种货币及其相应的比特币汇率,即时或过去 15 分钟内:
特定货币也可以转换为比特币。例如,您可以传递to_btc
方法,并传递我们要转换为btc
的货币和金额,并将结果作为比特币获取。以下代码显示了如何对 100 欧元进行此操作:
# Getting Bitcoin value for a particular amount and currency
btc = exchangerates.to_btc('EUR', 100)
print("\n100 euros in Bitcoin: %s " % btc)
以下截图显示了 100 欧元的比特币输出:
比特币区块链库的下一个类称为statistics
。
有许多方法可以调用以获取各种区块链统计数据,例如以下截图所示:
您可以按以下方式调用不同的方法:
statistics
上的get
方法,并保存该对象。例如,要获取比特币交易量,我们应该从创建的stats
对象中获取trade_volume_btc
属性,如以下代码所示:#!/usr/bin/env python
# import blockchain library
from blockchain import statistics
# get the stats object
stats = statistics.get()
# get and print Bitcoin trade volume
print("Bitcoin Trade Volume: %s\n" % stats.trade_volume_btc)
以下截图显示了比特币交易量:
stats
对象上调用btc_mined
属性,如下所示:# get and print Bitcoin mined
print("Bitcoin mined: %s\n" % stats.btc_mined)
以下截图显示了挖掘的比特币数量的输出:
stats
类,调用市场价格并将其附加到特定货币:# get and print Bitcoin market price in usd
print("Bitcoin market price: %s\n" % stats.market_price_usd)
对于区块浏览器方法,首先从blockchain
库中导入相关类。要获取特定的区块,请调用以下代码中显示的get_block
方法。它期望将一个区块作为参数传递。
# import blockchain library
from blockchain import blockexplorer
# get a particular block
block = blockexplorer.get_block('')
通过从网络上获取一个示例区块,从 Blockchain.info 上复制这个区块的哈希(区块#536081),并将其传递给get_block
方法,如下面的屏幕截图所示:
现在让我们获取有关这个区块的一些信息。例如,可以通过在创建的block
对象上分别使用fee
、size
和transactions
属性来获取区块费用、区块大小和区块交易,如下面的代码所示:
#!/usr/bin/env python
# import blockchain library
from blockchain import blockexplorer
# get a particular block
block = blockexplorer.get_block('0000000000000000002e90b284607359f3415647626447643b9b880ee00e41fa')
print("Block Fee: %s\n" % block.fee)
print("Block size: %s\n" % block.size)
print("Block transactions: %s\n" % block.transactions)
# get the latest block
block = blockexplorer.get_latest_block()
以下屏幕截图显示了区块费用、区块大小和区块交易输出:
Blockchain.info 库中还有许多可用的功能;其中一些与钱包、创建钱包等更相关。
要进一步探索这个库,请访问链接github.com/blockchain/api-v1-client-python
。
比特币挖掘的一些特点如下:
比特币挖矿是将比特币交易数据添加到比特币全球公共账本的过程。每个比特币矿工都与其他矿工一起合作,通过处理专门的分析和算术问题,将未完成的交易汇总到一个区块中。
为了获得准确性并解决问题,比特币矿工获取他们处理的所有交易。
除了交易费用,矿工还会收到每个他们挖掘的区块的额外奖励。任何人都可以通过运行计算机程序参与比特币挖矿。除了在传统计算机上运行外,一些公司设计了专门的比特币挖矿硬件,可以更快地处理交易并构建区块。
可以选择在www.bitcoin.com/
上云端挖掘比特币。
这些计划的过程表明,比特币挖矿的难度正在增加,随着时间的推移变得更加昂贵。
一些公司购买专门的硬件来挖掘比特币。其中一种硬件是来自 21.co 公司的 21 比特币计算机。因此,这种硬件预先安装了必要的软件。
还有许多可用的比特币挖矿软件,可以在任何机器上运行。然而,它可能不再那么高效。例如,让我们去www.bitcoinx.com/bitcoin-mining-software/
查看这样的软件的长列表。它们可以在各种操作系统上运行:Windows、Linux 和 macOS。有基于 UI 的比特币矿工,也有基于命令行的比特币矿工,例如 Python 中的实现 Pyminer。
由于竞争和困难的增加,挖掘比特币时必须牢记许多因素,如下列表所示:
由于竞争,比特币的价格日益昂贵
全球许多超级计算机正在竞争挖掘下一个区块和比特币。
随着比特币矿工数量的增加,开始挖掘新比特币变得更加困难和昂贵
例如,以下屏幕截图显示了比特币挖矿难度的增加情况;有关更多信息,请参考bitcoinwisdom.com/bitcoin/difficulty
。这张图表显示了过去两个月的数值。这一最近的趋势反映了比特币创立时开始的难度增加:
在本章中,我们学习了如何使用 Python 开始编程比特币。我们探索了使用 Python 进行 Blockchain.info API 编程,以获取统计数据和其他比特币市场数据。
我们还学习了如何开始挖掘比特币。我们看了看挖掘比特币的各种方式,并了解到由于竞争日益激烈和难度增加,比特币挖矿可能并不适合每个人。
在下一章中,我们将学习如何通过在网站上接受比特币、运行基于 API 的微服务,或者构建比特币交易机器人来开始以编程方式运行比特币。
在本章中,我们将学习如何在我们的网站上开始接受比特币作为支付方式。我们还将学习如何构建基于 API 的微服务以赚取比特币,并探索比特币交易机器人。
在本节中,我们将学习以下主题:
如何在我们的网站上启用比特币支付
介绍 BitPay,第三方比特币 API 服务
如何生成比特币支付按钮
如何在我们的网站上添加比特币支付按钮
有很多第三方 API 可用于网站上快速启用比特币支付,其中最流行的之一是 BitPay。
BitPay 可用于以多种不同的方式接受付款,包括以下方式:
您可以使用比特币在电子商务网站上接受在线付款
将比特币与许多不同的电子商务解决方案集成
与购物车集成
您可以显示启用比特币的支付按钮,这对于在博客或播客上接受捐赠非常有效
按照以下步骤生成比特币支付按钮:
首先,注册并登录 BitPay,网址为bitpay.com/
。
接下来,转到“支付工具|支付按钮”页面并创建支付按钮:
按照以下步骤将支付按钮添加到您的网站页面:
在代码编辑器中打开您网站页面的源代码。
粘贴我们在上一节从 BitPay 网站复制的 HTML 代码,保存文件并重新加载网页。
以下截图显示了网页上的支付按钮,用户可以使用它发送付款:
在本节中,我们将学习以下主题:
介绍 21.co 市场
开始使用 21.co SDK
开始为比特币出售服务
21.co 是一个平台,托管了一个虚拟市场,开发人员可以在其中创建并出售微服务以换取比特币。有关更多信息,请参阅earn.com/
。
我们将演示如何加入这个市场并出售微服务以赚取比特币。
为此,我们将使用 21.co 的 SDK。
21.co SDK 目前支持 Ubuntu 和 macOS。本节将演示在 AWS 上运行 Ubuntu 的情况。
您可以按照aws.amazon.com/premiumsupport/knowledge-center/create-linux-instance/
上的说明在 AWS 上创建 AWS Ubuntu 14.x 实例。
创建 AWS 实例后,请按照 AWS 文档页面上的说明连接到它,网址为docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html
。
连接到 AWS 实例后,安装 21.co SDK。您可以通过执行以下命令来完成:
curl https: //21.co | sh
安装 SDK 后,通过执行以下命令登录到您的 21.co 帐户:
21 login
如果用户没有 21.co 登录,则必须在 21.co 网站上创建帐户。登录后,首先加入 21.co 节点到 21.co 虚拟市场。您可以通过执行以下命令来完成:
21 market join
通过执行以下命令可以实现用户加入请求的状态:
21 market status
接下来,通过执行以下命令测试安装:
21 doctor
上述命令将显示所有测试都已通过,并且节点已设置并加入了 21.co 市场。
为了获取比特币余额,执行以下命令:
21 status
上述代码显示了在 21.co 账户中持有的比特币余额。
21.co 的 SDK 捆绑了一些服务。要启动所有这些服务,请执行以下命令:
21 sell start --all
可能会提示安装依赖项。如果是这样,您应该继续并执行。
有时,用户可能需要注销并重新登录以进行更改。
在 21.co 市场上出售微服务,请执行以下步骤:
21 sell start --all
它将显示所有可在虚拟市场上开始销售的微服务的列表。
21 sell status
21 sell stop -all
21 log
这是如何通过在 21.co 市场上出售和列出微服务来赚取比特币的演示。
在本节中,我们将学习以下主题:
如何获取比特币的当前出价和要价
如何决定是否买入或卖出比特币
触发比特币交易建议警报
实际的比特币买卖不会被涵盖,因为涉及实际货币。但是,我们将专注于根据我们设置的条件尝试买入或卖出比特币时发送电子邮件警报。
我们将使用比特币价格 API 模块来获取比特币价格。它可以在 GitHub 上找到github.com/dursk/bitcoin-price-api
。
为了设置比特币交易建议警报,请按照以下步骤进行:
exchanges
的比特币价格 API 开始:#!/usr/bin/python
# import modules
# Make sure to copy the exchanges from https://github.com/dursk/bitcoin-price-api
# to the same location as this script
from exchanges.bitfinex import Bitfinex
smtplib
,我们将用它来触发比特币价格警报。在这里,我们定义了一个名为trigger_email
的函数。然后设置服务器用户和电子邮件详细信息:import smtplib
# Function to send email
def trigger_email(msg):
# Change these to your email details
email_user = "bitcoin.harish@gmail.com"
email_password = "bitcoin1"
smtp_server = 'smtp.gmail.com'
smtp_port = 587
email_from = "bitcoin.harish@gmail.com"
email_to = "bitcoin.harish@gmail.com"
smtplib
,发送sendmail
函数发送价格警报电子邮件,如下面的代码所示:# login to the email server
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(email_user, email_password)
# send email
server.sendmail(email_from, email_to, msg)
server.quit()
# define buy and sell thresholds for Bitcoin. These values you have to change according to the current price of the bitcoin.
buy_thresh = 6500
sell_thresh = 6500
bitcoin_trade.py
脚本中导入的exchanges
模块获取当前比特币价格和当前出价。我们也可以使用其他交易所,如 CoinDesk,但目前我们将使用 Bitfinex。我们将在btc_sell_price
和btc_buy_price
中获取这些价格。# get Bitcoin prices
btc_sell_price = Bitfinex().get_current_bid()
btc_buy_price = Bitfinex().get_current_ask()
一旦我们得到了当前的价格,我们可以将它们与之前设置的阈值价格进行比较。
如果买入价格低于卖出阈值,我们调用trigger_email
函数发送买入触发电子邮件警报:
# Trigger Buy email if buy price is lower than threshold
if btc_buy_price < buy_thresh:
email_msg = """
Bitcoin Buy Price is %s which is lower than
threshold price of %s.
Good time to buy!""" % (btc_buy_price, buy_thresh)
trigger_email(email_msg)
trigger_email
函数发送卖出触发电子邮件警报:# Trigger sell email if sell price is higher than threshold
if btc_sell_price > sell_thresh:
email_msg = """
Bitcoin sell Price is %s which is higher than
threshold price of %s.
Good time to sell!""" % (btc_sell_price, sell_thresh)
trigger_email(email_msg)
谷歌搜索是搜索当前出价的最简单方法。为了实现比特币的买卖,应相应地触发两者。
以下是获取当前出价的步骤:
首先,检查比特币价格在线。
修改脚本,使买入警报首先触发。将买入阈值设置为高于当前价格。在这里,我们将买入阈值设置为6500
,如下面的代码所示:
# define buy and sell thresholds for Bitcoin
buy_thresh = 6500
sell_thresh = 6500
脚本已执行,买入警报应该已经发出。在电子邮件中检查。
以下屏幕截图显示,根据我们在脚本中设置的标准,我们已收到比特币警报电子邮件,建议我们购买比特币:
6400
作为门槛,并再次执行脚本。以下代码显示了sell_thresh
设置为6400
:# define buy and sell thresholds for bitcoin
buy_thresh = 6400
sell_thresh = 6400
现在,出售警报应该执行。再次在电子邮件中验证。
脚本已准备好。您现在可以将其设置为在各种操作系统上自动运行。在 Windows 上,请使用任务计划程序。
从“操作”菜单中,选择“创建任务…”,并将其命名为“比特币交易警报”,如下面的屏幕截图所示:
选择“每日”单选按钮。
然后,在高级设置中,选择在所需的分钟数或小时数后重复任务。在这里,我们将其设置为每 1 小时,如下面的屏幕截图所示:
接下来,从“操作”选项卡中,单击“新建…”按钮。
通过单击“浏览…”按钮选择要在任务运行时执行的脚本。现在,此任务将每小时自动运行,并将检查比特币价格,并发送电子邮件建议我们是否买入或卖出比特币。
您还可以选择直接从脚本中触发交易,使用任何比特币交易所 API,例如 coinbase.com。由于涉及实际资金,用户需要小心处理。
在本章中,我们探讨了如何在网站上启用比特币支付,向您介绍了 BitPay,学习了如何生成比特币支付按钮,以及如何将支付按钮添加到我们的网站上。我们还介绍了 21.co 市场和比特币的买卖服务,以及编写了一个简单的比特币交易机器人。我们学会了如何获取比特币的当前竞价和要价。我们还学会了如何决定是买入还是卖出比特币,以及如何发送电子邮件警报,建议我们是否执行该线程。
在下一章中,我们将学习如何对比特币数据进行数据分析。
在本章中,我们将使用 Python 探索比特币价格数据的操作和可视化。我们还将探索比特币交易图表,以及使用 Python 收集和分析比特币骰子游戏数据。
在本节中,我们将介绍以下主题:
为数据分析做好准备
获取、读取和清理比特币价格数据
探索、操作和可视化清理后的数据
我们首先需要安装几个 Python 库,其中包括安装pandas
模块用于读取数据,以及进行一些探索性分析。我们还将安装matplotlib
用于创建图表和图表,以及 Jupyter 笔记本,因为它们是进行数据分析的最佳工具。
要安装 Python 模块,请打开命令行程序。在命令行中,要安装pandas
,请执行以下命令:
pip install pandas
类似地,要安装matplotlib
,请执行以下命令:
pip install matplotlib
要安装 Jupyter,请执行以下命令:
pip install jupyter
完成安装所需的模块后,通过执行jupyter notebook
命令启动 Jupyter Notebook。这将在新的浏览器窗口或选项卡中打开,显示已经存在于我们执行jupyter notebook
命令的文件夹中的文件列表。以下屏幕截图显示了jupyter notebook
命令:
接下来,选择创建一个新的 Python 3 笔记本,如下屏幕截图所示:
我们将首先导入必要的模块。
导入pandas
以使您能够读取数据并开始探索。以下屏幕截图显示了import pandas
命令:
还要导入matplotlib
以从数据中绘制图表。
我们需要为pandas
和matplotlib
设置一些选项。以下屏幕截图显示了导入matplotlib
的命令:
我们将设置的第一个选项称为options.mode.chained_assignment = None
。
前面的选项是确保清理操作是在 pandas DataFrame 对象上执行的;我们希望清理操作发生在原始 DataFrame 对象上,而不是在副本上。
以下屏幕截图显示了options.mode.chained_assignment = None
选项:
还要设置matplotlib
以可视化和显示以下屏幕截图中显示的所有图表:
我们的价格数据来自coindesk.com
,如下屏幕截图所示,它可以免费下载:
以 CSV 格式下载数据并使用pandas
读取这些数据。这是一个 CSV 文件,所以我们将使用pandas
的read_CSV
方法,如下屏幕截图所示:
pandas 数据对象中的数据称为 DataFrame。DataFrame 是以表格形式的数据格式。现在,打印一些记录以查看其外观。要打印出来,我们可以在价格 DataFrame 上调用一个名为head()
的方法。
这样做后,我们会得到两列——日期
和收盘价
——表示当天比特币的美元价格。我们还有一个默认索引,从 0 开始的行,这是由pandas
在读取数据时默认插入的。以下屏幕截图显示了两列,日期
和收盘价
:
要获取有关此数据的顶级信息,请在其上调用info()
方法。调用此方法后,我们得到 2,592 条记录。有两列:Date
和Close Price
。Date
有 2,592 条非空记录,类型为对象,这意味着Date
字段已被读取为文本。我们稍后需要将其更改为正确的日期时间格式。我们有收盘价作为数值浮点类型。它有 2,590 条非空记录,比Date
字段少两条记录。
以下截图显示了info()
方法的详细信息:
为了打印底部的记录,调用tail()
方法。该方法显示最后两条记录不应该存在,因为它们不是日期或价格。在进行进一步分析之前,我们需要删除这些记录。
我们可以看到收盘价有 NaN 值,这意味着它有缺失值。我们可以利用这一因素从 DataFrame 中删除这两条记录。我们在价格上调用drop any
方法,这将删除具有一个或多个列为空或缺失值的记录。
请记住,我们只是从 DataFrame 价格中删除它,而不是从我们读取数据的 CSV 文件中删除它。
以下截图中的代码显示了tail()
方法的实现:
此外,再次查看底部行,看看我们想要删除的记录是否已经被删除。我们可以在以下截图中看到,实际上已经被删除了:
我们需要做的另一个数据清理任务是将Date
列从对象或文本格式转换为日期时间格式。我们使用 pandas 的to_datetime
方法来实现这一点。
在这里,我们要求to_datetime
方法将Date
字段或price
DataFrame 转换,并且我们还提供了格式。然后我们将Date
字段重新分配给 DataFrame,如下截图所示:
这就是我们将链式赋值设置为null
的原因,因为我们希望在原始 DataFrame 上进行更改。
再次调用info()
方法,查看数据清理是否产生影响。我们可以看到Date
字段现在是日期时间格式,正如我们想要的那样,并且数据中没有非空记录,如下截图所示:
我们还需要将索引设置为Date
列,并将Date
列删除为单独的列。这将帮助我们对日期数据运行一些有趣的查询。
以下截图中的代码显示了如何将索引设置为Date
列:
接下来,删除Date
列作为单独的列,因为它已经设置为索引,如下截图所示:
现在,Date
列可以看作是索引,而不再是一个单独的列,如下截图所示:
数据清理完成后,开始进行数据探索任务。我们可以使用 pandas 日期时间功能运行一些有趣的查询。
例如,如果我们想要获取特定年份的所有记录,将该年份传递给 DataFrame 内的方括号。以下截图显示了 2010 年的价格数据:
我们还可以指定我们是否要从特定日期获取数据。
以下截图显示了 2017 年 8 月 1 日的比特币价格:
我们还可以指定我们是否要从特定日期跨越一定日期的特定期间获取数据。
以下屏幕截图显示了 2017 年 8 月 1 日以后的数据:
还可以使用 pandas 方法检索统计信息。例如,要从数据集中获取最低价格,我们可以使用min()
方法,如下图所示:
要获取最高价格,使用max()
方法,如下图所示:
可以使用describe()
方法一次性获得大量统计信息,如下图所示:
使用pandas
和matplotlib
从数据开始创建图表非常容易。要绘制整个数据,我们将在price
DataFrame
上调用plot
方法,然后将得到一个图表,其中x轴是日期,y轴是价格数据。
以下屏幕截图描述了绘图,其中x轴是日期,y轴是价格数据:
我们还可以放大到特定的时间段。例如,为了仅绘制 2017 年的数据,首先选择来自 2017 年的数据,然后在数据子集上调用plot()
方法。
在下图中,我们有 2017 年以后的价格数据的图表:
在接下来的部分,我们将学习如何使用比特币交易图。
在本节中,我们将学习如何获取区块链数据,并提供逐步信息,以便探索、清理、分析和可视化这些数据。
Blockchain.info
是查看最新比特币统计数据和图表的最佳地方之一。有关比特币和区块链的不同类型的图表和图形可供分析。我们还可以以各种格式(CSV、JSON 等)下载数据。在上一节中,我们已经以 CSV 格式下载了部分数据,现在我们将在 Jupyter Notebook 中探索这些数据。
我们首先导入所需的模块。我们需要pandas
来读取、探索和清理数据,还需要matplotlib
来创建图表。
查看显示流通中比特币总数的数据。读取包含此数据的 CSV 文件,并创建一个pandas
DataFrame
。
以下屏幕截图显示了流通中比特币的总数量的数据:
为了探索这些数据,我们使用head()
方法查看顶部的记录,并在 DataFrame 上调用info()
方法以获取更多信息,例如有多少记录、有多少空记录或缺失记录,或各列的数据类型是什么。
我们可以看到Date
列显示为对象。我们将其更改为日期时间以可视化这些数据。为此,我们使用to_datetime
方法,并将转换后的值分配回同一列——DataFrame。
以下屏幕截图描述了比特币的日期格式:
将 DataFrame 的索引设置为Date
列,并删除Date
列作为单独的列。执行此步骤以利用 pandas 的时间序列功能。
现在,通过在 DataFrame 上调用info
和head
来再次检查是否发生了更改。
以下屏幕截图显示了特定日期范围内的比特币:
现在我们准备从这些数据创建图表。在 DataFrame 上调用plot()
方法,然后调用show()
方法显示图表。
它显示了已经在我们有记录的时间段内挖出的比特币总数。
以下截图描述了前述数据的图表:
让我们看另一个例子。在这里,我们正在查看我们读入数据的区块数据的交易:
最初,我们使用head
和info
方法对这些数据进行可视化探索,如下截图所示:
接下来,我们清理、转换和重塑数据,如下截图所示:
最后,我们将在区块数据中可视化我们的交易,如下截图所示:
同样,还有另一个例子,我们应该看一下关于显示挖矿难度的数据。挖矿数据的步骤如下:
我们可以看到多年来挖矿难度逐渐增加,并呈上升趋势。这些只是交易图表的几个例子。比特币和区块链生态系统中还有很多其他可供您探索的数据。
在下一个模块中,我们将学习如何收集和分析比特币骰子游戏数据。
在本节中,我们将查看来自骰子游戏门户的数据,从 API 中读取数据,并使用pandas
将其转换为表格格式。我们还将导出数据并找到需要清理的内容。我们将清理、操作和重塑数据,使其准备好进行分析,最后,我们将从干净的数据中绘制一个简单的图表。
用户可以从 MegaDice.com 上的 API 链接探索骰子游戏数据,该数据可从网站的 API 链接www.megadice.com
获取。
我们将使用pandas read_JSON
方法从 MegaDice API 链接中读取个人赢家历史数据。我们从这些数据创建了一个名为leaders
的pandas DataFrame
,并调用head()
方法来查看这些数据的样子。
以下截图中的代码显示了pandas
DataFrame
leaders
的创建:
我们导入的数据有 703 列,其中大部分是个别日期。我们将删除最后一列queryTimeInSeconds
,这不是实际数据的一部分,也不应该存在。该列显示在以下截图中:
由于列太多,行太少,我们希望将列变成行,其中每个状态都有一行记录。为了执行此操作,我们需要将列翻转为行,反之亦然。为此,我们需要执行以下步骤:
DataFrame
时,此列的值将成为列名。使用head()
方法确认,如下截图所示:T
或转置的方法翻转 DataFrame,如下截图所示:我们已经得到了想要的列和行,但还有一些其他事情需要做。我们希望日期值以日期时间格式显示,但目前它是文本格式。然而,数据框的转置已经将日期值更改为索引。我们需要首先使用reset_index
方法将它们转换为列,如下面的屏幕截图所示:
现在我们可以将这些文本数据转换为正确的日期时间格式,如下面的屏幕截图所示:
调用“info()”方法来确认这一点。我们在适当的日期时间格式中有了新的列“日期”。日期值需要以文本格式显示在列名索引中,如下面的屏幕截图所示:
我们将把索引设置回适当的“日期”列,并将“日期”列作为单独的列删除,如下面的屏幕截图所示:
现在,我们已经正确地在“日期”字段上建立了数据框的索引:
使用“plot()”方法绘制这些数据的示例图,并使用“plt.show()”方法显示,如下面的屏幕截图所示:
现在,这些数据可以用作pandas
时间序列函数,或者可以为不同日期子集可视化多个块等。
在本章中,我们学习了如何准备数据分析的设置。我们看到了如何获取、读取和清理价格数据。我们还学习了如何探索、操作和可视化清理后的数据。
我们还探索了一些比特币和区块链图表,我们可以创建。我们学习了从哪里获取相关数据,并在 Jupyter Notebook 中读取了这些数据并导入了必要的模块。我们清理和操作了这些数据,最后,我们从这些数据和笔记本中创建了图表,但没有使用 Python。
我们还探索了来自骰子游戏门户的数据。我们添加了来自 API 的数据,并使用 pandas 将其转换为表格格式。我们探索了数据,并找到了需要清理的内容。我们清理和操作了数据,并使其准备好进行分析。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。