精通比特币(第二版)

 主页   资讯   文章   代码   电子书 

1.1什么是比特币?

比特币一是构成数字货币生态系统基础的概念和技术的总称,二是货币单位,用于在比特币网络中的参与者之间存储和传递价值。比特币用户主要通过在互联网上使用比特币协议进行通信,也可以使用其他传输网络。比特币协议栈是开源软件,可以在各种计算设备(包括笔记本电脑和智能手机)上运行,从而使该技术易于被人接受。

用户通过网络转账比特币,就可以完成常规货币做到的任何事情,包括买卖商品,汇款给别人或组织,或者进行借贷。比特币可以在专门的数字货币交易所购买,出售和兑换其他货币。比特币在某种意义上是互联网货币的完美形式,因为它快速,安全和无地域限制。

与传统货币不同,比特币完全是虚拟的。没有物理硬币,甚至也没有数字货币本身。这种币隐含在从发送方到接收方转账交易中。 在比特币网络中,比特币用户用自己的密钥,证明自己的比特币所有权。凭借这些密钥,他们可以对交易进行签名以解锁自己的比特币,并将其转账给新的所有者实现了消费。密钥通常存储在每个用户的计算机或智能手机上的数字钱包中。拥有可以签署交易的密钥是消费比特币的唯一先决条件,将凭此密钥,用户可以完全控制自己的比特币。

比特币是分布式的点对点系统。因此,没有“中央”服务器或控制节点。比特币是通过称为“挖矿”的过程实现发行的,在处理比特币交易的过程中引入一种竞争机制,这种竞争机制就是参与者都来寻找一个特定数学问题的答案。比特币网络中的任何参与者(即,使用运行完整比特币协议栈的设备的任何人)都可以作为矿工使用其计算机的处理能力来验证和记账交易。平均每隔10分钟,一个比特币矿工如果打包并验证了过去10分钟的交易(即挖出一个新的区块),就能获得这个区块全新的比特币奖励。比特币挖矿从根本上解决了中央银行的货币发行和结算功能,取代了任何中央银行的功能。

比特币协议包括内置的算法,用于调整整个网络的挖矿能力。平均而言,任何时候,无论多少矿工(以及多大处理能力)参与竞争,矿工挖矿的难度都是动态调整的,这样来保证每10分钟都有人可以挖矿成功。比特币协议还规定每4年发行新比特币的比例减少一半,最终实现将发行的比特币的总数限制在2100万个这样的的固定总量。结果是,流通的比特币数量是一个可以预测的曲线,到2140年将达到2100万。由于比特币的发行率是递减的下降,长期来看,比特币货币是通货紧缩。此外,比特币不能通过“印刷”(增发)超过预期发行率的新货币来膨胀。

换句话说,比特币(bitcoin)也是汇集比特币协议,点对手对等网络和分布式计算创新出来的的代名词。比特币货币真的只是这项创新的第一个应用实践。

比特币代表了数十年密码学和分布式系统研究的结果,包括了四个关键创新,比特币将这四个创新以独特和强大的方式组合在一起。

比特币这四个创新包括:

  • 去中心化的点对点对等网络(比特币协议)

  • 公开交易总帐(区块链)

  • 独立验证交易和发行货币的一套规则(共识规则)

  • 通过区块链有效实现全球去中心化共识的机制(工作量证明算法)

作为一名开发人员,我将比特币视为货币互联网,这是一个通过分布式计算传播价值,确保数字资产所有权的网络。比特币还有很多一眼看不到的更多的内容。在本章中,我们将介绍一些主要的概念和术语,必要的软件,并使用比特币进行简单的交易。在接下来的章节中,我们将开始逐级展开比特币中重要的技术层次,并进一步了解比特币网络和协议的内部机制。

比特币之前的数字货币

可行的数字货币的出现与密码学的发展密切相关。使用数字进行交换商品和服务对所有人来说都是一场真正的挑战,这一点都不奇怪。面对数字货币,人们都要问三个基本问题:

我能相信钱是真实的,不是伪造的吗?

我如何知道数字货币只能花一次(即“双重支付”)吗?

我如何确定这笔钱属于我,而同时没有人声称这笔钱属于他们?

纸币发行者通过使用越来越复杂的纸张和印刷技术不断打击假钱。实体纸币很容易解决双重支付问题,因为同一纸币不能同时在两个地方。当然,传统的钱也经常以数字方式存储和传送。在这些情况下,假钱和双重支出问题是通过中央权威机构清算所有电子交易来处理的,中央权威机构拥有面向的货币信息。对于不能利用秘制油墨技术或全息条码的数字货币,密码学为保障用户财产价值的合法性提供了依据。具体来说,加密数字签名使用户通过对数字资产签名证明该资产的所有权。通过适当的构造,数字签名也可用于解决双重支出问题。

当加密技术在20世纪80年代末开始变得更广泛理解并被使用时,许多研究人员开始尝试使用加密技术构建数字货币。这些早期的数字货币项目发行的数字货币,通常由国家法定货币或贵金属(如黄金)来背书。

虽然这些早期的数字货币能够有效运行,但它们是中心化的,因此很容易被政府和黑客攻击。早期的数字货币使用中心化的票据交易所定期处理所有交易,就像传统的银行系统一样。不幸的是,在大多数情况下,这些新兴的数字货币成为了政府担忧的目标,有些是由于诉讼消失了。有些由于母公司突然清盘就失败了。为了防止来自不同方面的干越,无论这些方面是合法的政府或是犯罪分子,数字货币都需要去中心化来避免单节点攻击导致失败。比特币就是一种这样一个去中心化的系统,不受制于任何可能被攻击或损坏的节点或控制节点。

1.2比特币历史

Bitcoin是在2008年由署名Satoshi Nakamoto的牛人发明的,他出版了一篇题为“Bitcoin:A Peer-to-Peer Electronic Cash System”的文章[1]。 Nakamoto结合了诸如b-money和HashCash等先前的发明,创建了一个完全去中心化的电子现金系统,它不依赖中央机构进行货币发行、结算和验证交易。关键的创新是使用分布式计算系统(称为“工作量证明”算法),每10分钟进行一次全球性的“选举”,从而实现分布式网络达成全网交易状态的共识。这优雅地解决了双重支付的问题,就是避免一个货币单位可以花费两次。以前,双重支付问题是数字货币的弱点,这个问题都是通过中心化的票据交换所清算所有交易来解决的。

比特币网络始于2009年,基于中本聪发布的参考实施指南,之后由许多其他程序员进行修订。为比特币提供安全性和弹性的工作量证明算法(挖矿)的算力以指数级增长,现在已经超过了世界顶级超级计算机的整体处理能力。比特币的总市值有时超过200亿美元,这取决于比特币兑美元的汇率。到目前为止,网络处理最大的交易额是1.5亿美元,可以实现即时传输,无需任何费用处理(只需要少许矿工费)。

Satoshi Nakamoto于2011年4月退出公众视线,将代码和网络的责任托付到一个蓬勃发展的志愿者小组身上。比特币背后的这个人身份仍然未知。然而,中本聪和任何人都没有对比特币系统进行个人控制,这个系统基于完全透明的数学原理,开放源代码和参与者之间的共识持续运行。这项发明本身具有开创性,这种开创性已经延伸到分布式计算,经济学和计量经济学领域。

分布式计算问题的解决方案 Satoshi Nakamoto的发明也是对分布式计算当中一个古老问题的实用和新颖的解决方案,这就是 “拜占庭式将军”问题。这个问题简而言之,就是在不可靠和不可信的网络上,如何通过交换信息协商一个行动方案或一个系统的状态。 Satoshi Nakamoto的解决方案是使用工作量证明,在没有中央信任机构的情况下实现共识,标志着分布式计算的突破,这一方案具有数字货币范围之外的广泛适用性。可以用来在分布式网络上达成一致,比如彩票,资产登记,数字公证等等实现保证公平。

1.3比特币使用,用户和他们的故事

比特币是古老的“钱”的技术创新。其核心在于方便了人与人之间的价值交换。因此,为了充分了解比特币及其用途,我们将从使用它的人的角度审视它。这里列出的每个人和他们的故事都说明了一个或多个具体的场景。我们将在整本书中看到他们:

北美小额零售店

Alice住在北加州湾区。她听从事技术工作的朋友说过比特币,因此想要尝试使用它。我们将跟随她的故事,了解她学习比特币,购买,以及在帕洛阿尔托的Bob咖啡厅用比特币买一杯咖啡的经过。这个故事将从普通消费者的角度向我们介绍软件,交易所和基本交易。

北美高端零售店

Carol是旧金山的艺术画廊老板。她卖昂贵的绘画换取比特币。这个故事将介绍高端商品店面临的“51%”共识攻击的风险。

离岸合同服务

Bob,帕洛阿尔托的咖啡店老板,正在建立一个新的网站。他与印度的网络开发商Gopesh签约,后者在印度班加罗尔居住。 Gopesh同意使用比特币中支付。这个故事将研究使用比特币进行外包,合同服务和国际电汇。

网上商店

Gabriel是里约热内卢的一个有进取心的小伙,经营着一家小型网店,销售比特币品牌的T恤,咖啡杯和贴纸。Gabriel太年轻了,还没有银行账户,但他的父母鼓励他的创业精神。

慈善捐款

Eugenia是菲律宾儿童慈善机构的负责人。最近她已经知道了比特币,并希望利用它来接触新的国内外捐助者,为她的慈善筹款。她还在学习使用比特币快速将资金分配给被救助者地区的方法。这个故事将展示使用比特币实现跨币种和跨国界的全球筹款活动,以及在慈善组织中使用开放透明的分类账簿。

进出口

Mohammed是迪拜的电子进口商。他正在尝试使用比特币从美国和中国购买电子产品,进口到阿联酋,以加速付款过程。这个故事将展示如何将比特币用于与实体商品相关的大型企业之间的跨过支付。

比特币挖矿

Jing是上海的计算机工程专业学生。他已经使用学习到的工程技术来建立一个“挖矿”矿机,通过挖比特币来提高收入。这个故事将研究比特币的“工业”基础:用于确保比特币网络和发行新货币的专门挖矿设备。

这些故事中的每一个都是基于目前使用比特币的真实人物和实际行业,为解决全球经济问题,创造出新的市场,新的行业和创新的解决方案。

1.4入门

比特币是一种协议,访问协议的方法是使用同样协议的客户端应用程序。 “比特币钱包”是比特币系统最常见的用户界面,就像Web浏览器是HTTP协议最常用的用户界面一样。有不同形式和品牌的比特币钱包,就像有许多品牌的网络浏览器(例如,Chrome,Safari,Firefox和Internet Explorer)。正如我们最喜欢的浏览器(Mozilla Firefox,Yay!)和我们不喜欢的(Internet Explorer,Yuck!),比特币钱包的质量,性能,安全性,隐私和可靠性也各不相同。还有一个比特币协议的参考实现,其包括被称为“Satoshi客户端”或“Bitcoin Core”的钱包,该钱包是由Satoshi Nakamoto最初编写的客户端衍变而来的。

1.4.1选择比特币钱包

比特币钱包是比特币生态系统中最活跃的开发的应用之一。这里竞争激烈,有正在开发推出的新的钱包,也有一些钱包已不再积极维护。许多钱包专注于特定的平台或具体用途,还有些更适合初学者,而另外一些钱包则为高级用户提供了更多功能。选择钱包是非常主观的,取决于使用场景和用户的专业知识。因此,不可能推荐一个特定的钱包适合所有人。然而,我们可以根据平台和功能对比特币钱包进行分类,并提供针对不同类型的钱包的一些建议。更好的是,在比特币钱包之间转账是容易,便宜和快速的,所以值得尝试几种不同的钱包,直到找到符合自己需求的钱包。

根据平台,比特币钱包可以分类如下:

桌面钱包

桌面钱包是作为参考实现创建的第一种类型的比特币钱包,许多用户使用桌面钱包为的是实现比特币的基本功能,自主性和控制权。在通用操作系统(如Windows和Mac OS)上运行具有一定的安全隐患,因为这些平台如果配置不当往往不安全。

手机钱包

手机钱包是比特币钱包最常见的类型。在智能手机操作系统(如Apple iOS和Android)上运行,这些钱包通常是新用户的绝佳选择。许多都是为了简单易用而设计的,但也有功能强大的全功能移动钱包。

web钱包

Web钱包通过网络浏览器访问,并将用户的钱包存储在由第三方的服务器上。这类似于webmail,因为它完全依赖于第三方服务器。其中一些服务使用在浏览器中运行的客户端(插件)代码进行操作,该代码可以控制用户手中的比特币密钥。然而,大多数人需要在安全和方便性之间进行妥协。在第三方系统上存储大量的比特币是不合适的。

硬件钱包

硬件钱包是在专用硬件上独立操作比特币钱包的设备。它们通过USB与桌面网络浏览器或通过移动设备上的NFC进行操作。通过专用硬件进行所有比特币相关操作,这些钱包被认为是非常安全的,适合存储大量的比特币。

纸钱包

控制比特币的密钥也可以打印出来长期存储。即使可以使用其他材料(木材,金属等),这些也被称为纸钱包。纸钱包提供低技术但高度安全的长期存储比特币的方法。脱机存储也经常被称为冷存储。

对比特币钱包进行分类的另一种方法是通过他们的自主程度以及它们如何与比特币网络进行交互:

全节点客户端

完整客户端或“完整节点”是存储比特币交易的全部历史(每个用户每次交易)的客户端,管理用户的钱包,并且可以直接在比特币网络上启动交易。完整节点处理协议的所有方面,并可以独立地验证整个区块链和任何交易。全节点客户端消耗大量计算机资源(例如,超过250 GB的磁盘,2 GB的RAM),但可以提供完全自主和独立的交易验证。

轻量级客户端

一个轻量级的客户端,也称为简单支付验证(SPV)客户端,连接到比特币完整节点(前面提到过的),用于访问比特币交易信息,可以在本地存储用户钱包,并独立地创建,验证和传输交易。轻量级客户端与比特币网络直接交互,无需中介。

第三方API客户端

第三方API客户端是通过应用程序编程接口(API)的第三方系统与比特币交互的API客户端,而不是直接连接到比特币网络。 这时钱包可能由用户或第三方服务器存储,但所有交易都需要通过第三方。

结合这些分类,比特币钱包可以分为几个小组,三个最常见的划分是桌面全客户端,移动轻巧钱包和网络第三方钱包。不同类别之间的界限通常是模糊的,许多钱包在多个平台上运行,并且可以以不同的方式与网络进行交互。

为了本书的目的,我们将演示使用各种可下载的比特币客户端,从参考实现(Bitcoin Core)到移动和网络钱包。一些示例将需要使用Bitcoin Core,除了作为完整的客户端,还可以将API暴露给钱包,网络和交易服务。如果您计划探索比特币系统中的编程接口,则需要运行Bitcoin Core或其他客户端(参见第三章)。

1.4.2快速开始

我们在上一节的故事中介绍的Alice不是技术行家,只听到她的朋友Joe提到过比特币。在聚会上,Joe再次热烈地向周围的人解释了比特币,并提供演示。有趣的是,Alice问她如何开始使用比特币。Joe说,手机钱包最适合新用户,他推荐了他最喜欢的几款钱包。Alice下载Android的“Mycelium”,并将其安装在手机上。

当Alice首次运行Mycelium时,与许多比特币钱包一样,应用程序会为她自动创建一个新的钱包。Alice在她的屏幕上看到钱包,如“Mycelium手机钱包”如下图1-1所示(注意:不要将比特币发送到此示例地址,它将永远丢失)。

图1-1 Mycelium移动钱包

这个屏幕最重要的部分是Alice的比特币地址。 在屏幕上,它显示为一长串字母和数字:1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK。 钱包的比特币地址旁边是一个二维码,这是一种条形码,可由智能手机的相机扫描出同一格式的相同信息。二维码是具有黑色和白色点的图案的正方形。 Alice可以通过点击二维码或接收按钮将比特币地址或二维码复制到剪贴板上。 在大多数钱包中,点击二维码也会放大,以便更容易通过智能手机相机进行扫描。

提示 比特币地址以1或3开头。像电子邮件地址一样,可以分享给其他比特币用户,然后别人直接将比特币发送到您的钱包。 从安全角度看,比特币地址没有任何敏感信息。 它可以发布到任何地方,而不会危及帐户的安全。 与电子邮件地址不同,可以随意创建新的地址,所有这些地址都会将资金归集到您的钱包。 事实上,现在许多钱包为每个交易自动创建一个新地址,以最大限度地提高隐私。 钱包只是一个地址和解锁资金的密钥的集合。

Alice现在准备好接收资金了。她的钱包应用程序随机生成一个私钥(在第四章中更详细地描述)及其相应的比特币地址。这时,她的比特币地址对于比特币网络来说还是是不知道的,或者说还未注册到比特币系统中。她的比特币地址只是一个数字,对应于一个可以用来控制资金访问的密钥,是由她的钱包独立生成的,不需要调用或注册任何服务。事实上,在大多数钱包中,比特币地址和任何外部可识别的信息(包括用户的身份)之间没有关联。在该地址被引用到比特币总帐的交易中作为接收者之前,这个比特币地址只是在比特币网络中有效的大量可能的地址的一个。一旦与交易相关联,这个地址就成为网络中已知地址的一个。

Alice现在可以开始使用她新的比特币钱包了。

1.4.3得到你的第一个比特币

新用户的第一个也是最困难的任务是获取一些比特币。与其他外币不同,您还不能在银行或自助机购买比特币。

比特币交易是不可逆转的。大多数电子支付网络(如信用卡,借记卡,PayPal和银行帐户转帐)都是可逆的。对于销售比特币的人来说,这种差异引起了很高的风险,买方在收到比特币后有可能会撤销电子支付,实际上欺骗了卖家。为了减轻这种风险,接受传统电子支付公司通常要求买方进行身份验证和信用验证(可能需要几天或几周时间)。作为新用户,这意味着您不能立即使用信用卡购买比特币。需要有一点耐心和其他思路,但是不要着急。

以下是作为新用户得到比特币的一些方法:

找一个有比特币的朋友,直接从他或她那里买一些。许多比特币用户都是以这种方式开始的。这种方法是最简单的。找到比特币持有者的好办法是参加Meetup.com上列出的本地比特币会议。(在中国根本无需这么麻烦,加微信群,在线支付就可以)

使用分类服务,如localbitcoins.com来查找您所在地区的卖家,场外交易购买比特币。

通过出售产品或服务赚取比特币。如果你是程序员,出售你的编程技巧。如果你是美发师,理发只收比特币。

在你的城市使用比特币ATM。比特币自动取款机是接受现金并将比特币发送到智能手机比特币钱包的机器。使用Coin ATM Radar的在线地图找到靠近您的比特币ATM。

使用与您的银行帐户相关联的比特币交易所。现在有很多国家都有数字货币交易所,为买卖双方交易使用当地法币进行交易。实时行情服务(如BitcoinAverage)通常会显示支持法币兑换的比特币交易所列表。

提示 比特币与其他支付系统相比的优点之一是,使用得当,它为用户提供了更多的隐私保护。 单纯获取,持有和支付比特币不要求您向第三方泄露敏感个人身份信息。 但是,如果涉及法币兑换的交易所,那么就需要遵守当地的国家法律和国际法规。 为了用法币兑换比特币,您通常需要提供身份证明和银行信息。 大家有必要知道,一旦比特币地址附加到一个身份,所有与此关联的比特币交易也很容易识别和跟踪。 这是许多用户选择将专用交易账户与其钱包进行分离的一个原因。

Alice听朋友介绍比特币,所以她有一个简单的方法来获得她的第一个比特币。接下来,我们将看看她如何从她的朋友Joe 购买比特币,以及Joe 如何将比特币发送到她的钱包。

1.4.4查找比特币当前价格

在Alice可以从Joe 购买比特币之前,他们必须同意比特币和美元之间的汇率。这给比特币新人带来了一个共同的问题:“谁设定比特币价格?”简单的答案是价格是由市场决定的。

比特币与大多数其他货币一样,有浮动汇率。这意味着比特币与任何其他货币的兑换汇率都会根据各个交易市场的供求情况而波动。例如,以美元计算的比特币的“价格”是根据各个市场最近的比特币和美元交易计算的。因此,价格往往每秒钟都会有几次波动。定价服务将汇总来自多个市场的价格,并根据各个市场的交易量加权计算该货币对(例如BTC / USD)的汇率平均数。

有数百个应用程序和网站可以提供当前的市场汇率。这里有一些最受欢迎的:

Bitcoin Average该网站提供每种货币的成交量加权平均数的简单视图。

CoinCap列出了数百种加密货币(包括比特币)的市值和汇率。

Chicago Mercantile Exchange Bitcoin Reference Rate可用于机构和合同的参考汇率,作为CME投资数据的一部分。

除了这些不同的网站和应用程序,大多数比特币钱包都将自动转换比特币和其他货币之间的兑换价格。 在将比特币发送给Alice之前,Joe将使用自己的钱包自动转换价格。

1.4.5发送和接收比特币

Alice不愿意太冒险,只决定将10美元转换成比特币。她给Joe 10美元现金,打开她的Mycelium钱包应用程序,并选择Receive。这将显示一个二维码与Alice的第一个比特币地址。

Joe然后在他的智能手机钱包上选择发送,并显示一个包含两个输入的屏幕:

  • 收款方的比特币地址
  • 以比特币(BTC)或其当地法币(USD)计价的发送金额

在比特币地址的输入字段中,有一个看起来像二维码的小图标。Joe用他的智能手机相机来扫描条形码,这样就不必输入Alice的比特币收款地址,手动输入费时,而且容易出错。 Joe点击二维码图标并激活智能手机相机,扫描Alice智能手机上显示的二维码。

Joe现在将Alice的比特币地址设置为收件人,输入金额为10美元,他的钱包通过访问在线服务转换为最新汇率。当时的汇率是每个比特币$100美元,所以如Joe的钱包(见图1-2Airbitz移动比特币钱包发送屏幕)截图所示,10美元的价值是0.10比特币(BTC)或100毫比银币(mBTC)。

图1-2. Airbitz移动比特币钱包发送屏幕

Joe然后仔细检查,确保输入了正确的金额,因为转账错误是不可撤销的。经过仔细检查地址和金额后,他按发送(send)键进行转账。 Joe的移动比特币钱包构建了一个交易,从Joe的钱包将0.10 BTC发送给Alice提供的地址,并用Joe的私钥对该交易签名。这就告诉比特币网络,Joe已经授权将这笔钱转移给Alice的新地址。当交易通过点对点网络传输时,它会在比特币网络快速传播。在不到一秒钟内,网络中大多数连接良好的节点都会接收到这笔交易,并且首次看到Alice的地址。

同时,Alice的钱包不断地“倾听”在比特币网络上发布的交易,寻找与她的钱包中的地址相匹配的任何内容。在Joe的钱包发送交易几秒钟后,Alice的钱包将显示它正在接收0.10 BTC。

确认交易 起初,Alice的钱包把与Joe的这笔交易显示为“未确认”。这意味着交易已传播到网络,但尚未记录在比特币交易账簿即区块链中。确认,就是一个交易必须包含在一个区块中,并被添加到区块链,这样的情况平均每10分钟发生一次。在传统的财务术语中,这被称为清算。有关比特币交易的传播,验证和清算(确认)的详细信息,请参阅挖矿章节第十章。

Alice现在可以自豪地称自己拥有了0.10BTC了,她有权花费这些钱了。在下一章中,我们将首先用比特币进行购买,并更详细地研究交易和传播的底层技术。

参考内容:

  1. "Bitcoin: A Peer-to-Peer Electronic Cash System," Satoshi Nakamoto (https://bitcoin.org/bitcoin.pdf).