精通区块链编程:加密货币原理、方法和应用开发(原书第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2021-04-22 20:29:54

点击下载

作者:(希)安德烈亚斯·M.安东波罗斯

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精通区块链编程:加密货币原理、方法和应用开发(原书第2版)

精通区块链编程:加密货币原理、方法和应用开发(原书第2版)试读:

前言

我第一次偶遇比特币是在2011年年中,当时的反应大概是“哈!书呆子的钱嘛!”因为没能领会它的重要性,我忽视它长达六个月之久,而让我稍感宽慰的是,我认识的许多聪明绝顶的人也是这种反应。在一次邮件列表讨论时,我再次接触到比特币,于是决定阅读中本聪(Satoshi Nakamoto)写的白皮书,研究比特币的权威解释,看看到底是怎么一回事。我仍记得刚刚读完那九页内容的一刻,我才终于明白了:比特币不单单是一种数字货币,还是一种给货币及其他很多东西提供基础的信任网络。对“不是货币,而是去中心化信任网络”的领悟,让我开启了为期四个月的比特币沉醉之旅。我如饥似渴地寻找任何关于比特币的点滴信息,变得越来越着迷,每天都会花12个小时以上紧盯屏幕,竭尽所能地阅读、写作、学习和编程。从这段着魔的状态中走出来的时候,我的体重由于饮食没有规律而轻了20多磅,同时我也坚定了要全心投入比特币事业的决心。

随后的两年,我创立了一系列开发比特币相关服务和产品的公司,之后我决定写第一本书。书的主题就是激发了我疯狂的创造力并让我冥思苦想的比特币,它是我在继互联网之后遇到的最为振奋人心的技术。现在是时候跟更广大的读者分享我对这项惊人技术的热情了。阅读对象

本书主要面向程序员。如果你能使用一门编程语言,本书将会告诉你加密货币的原理、使用方法,以及如何开发与之相关的软件。对希望理解比特币及加密货币内在工作机制的非程序员读者,本书前几章作为对比特币的深入介绍依然适用。封面故事

在群居生物物种中,切叶蚁表现出高度复杂行为的物种特征。但是群落中的每一只蚂蚁个体仅仅遵循一些社会互动和化学气味(即信息素)交换的简单规则。维基百科提到:“切叶蚁形成地球上仅次于人类的最为庞大且复杂的动物社会。”实际上,切叶蚁不吃叶子,而是使用叶子制造一种真菌来充当蚁群主要的食物来源。意识到了吗?它们在耕作!

虽然切叶蚁形成的是阶级社会,且依靠蚁后繁衍后代,但是在蚁群中不存在中央集权体制或领导人。通过切叶蚁我们可以看到,群落中数百万成员所展现的高度智能且复杂的行为是社会网络中个体互动这一性质的凸显。

大自然向我们证明,去中心化体制具有弹性并能创造出意想不到的复杂性和难以想象的精妙,而不需要中央集权体制、等级制度或复杂的组织结构。

比特币网络正是这样一个高度复杂的去中心化可信网络,能够支撑无数财务流程。然而,比特币网络的每一个节点都遵循一些简单的数学准则。节点间的相互作用促成并引起组织的复杂行为,而不是某个单一节点自身具有复杂性和可信性。就像蚁群一样,比特币的弹性网络是一个由众多遵循简单准则的简单节点所组成的弹性网络,这些简单的节点准则聚合在一起可以完成惊人的事情,而不需要任何中枢协调。排版约定

本书采用以下排版约定:

斜体(Italic)

指示新的术语、URL链接、email地址、文件名和文件扩展名。

等宽体(Constant width)

用于程序清单的显示,也用于段落中涉及的程序要素,如变量或函数名、数据库、数据类型、环境变量、语句和关键字。

等宽粗体(Constant width bold)

显示需要由用户输入的命令和其他文字。

等宽斜体(Constant width italic)

显示需要由用户提供的或根据上下文环境修改的值。这个标志表示提示或建议。这个标志表示通用注释。这个标志表示警告或提醒。代码示例

本书示例是基于类Unix操作系统(例如Linux或Mac OS X)的命令行,用Python或C++编程语言来编写。全部代码段均可在GitHub主代码库中的code子目录获得。读者可以通过GitHub库(https://github.com/aantonop/bitcoinbook)创建自己的代码分支,尝试书中示例,或者提交代码更正。

所有代码段在大多数操作系统上都可以通过最小化安装对应语言的编译器和解释器来重现。在必要的地方,本书还提供了基本的安装指令以及每步指令输出的结果。

为了适应版面,本书重新格式化了部分代码段和代码输出。在所有此类例子中,每行代码以反斜杠(\)字符和换行符分开。当你需要尝试这些示例时,请删除这两个字符把被分隔的两行重连起来,这样就可以得到与例子中一致的结果了。

本书所有代码段尽可能地采用实值计算,因此你可以通过重复构建本书提供的代码示例,用你自己写的代码计算出相同的结果。譬如,书中出现的私钥和对应的公钥及地址也都是真实存在的。示例中的所有交易、区块和区块链均被记录在实际的比特币区块链中,是公共账目的一部分,因而你可以在任何比特币系统中检查它们。使用代码示例

本书的目的是帮助你完成工作。总之,你可以在程序和文档中使用本书的代码示例。除非你要复制代码的关键部分,否则不需要联系我们获得许可。例如,使用程序中的几段代码,或者引用本书及代码来回答问题是不需要获准的;而售卖或分发包含O’Reilly书中代码示例的光盘,或者将书中的大量代码合并于你的产品或文档则必须获得我们的许可。

我们鼓励但不强制要求你在引用本书时表明出处。书目引用格式通常包括书名、作者、出版商、ISBN。例如:“Mastering Bitcoin,Andreas M.Antonopoulos(O’Reilly,2017),978-1-491-95438-6”。

本书某些版本提供了开源许可,如CC-BY-NC(https://creativecommons.org/licenses/by-nc/4.0/),这种情况下,开源许可条款适用。如果你觉得你对本书代码示例的使用超出了合理范围或上述许可,请随时与我们联系:permissions@oreilly.com。书中涉及的比特币地址与交易

书中的比特币地址、交易、密钥、二维码、区块链数据大部分都是真实的。这意味着你可以通过脚本或程序等方式在比特币区块链中查看示例给出的交易。

然而,需要注意的是创建地址的这些私钥要么写入书中,要么已经被“焚毁”。这就意味着如果你往这些地址中转入比特币的话,这些比特币要么永远丢失,要么会被本书的其他读者通过书中给出的私钥拿走。不要向书中给出的任何地址转比特币。否则你的钱将永远消失或被本书其他读者拿走。Safari在线图书O’Reilly Safari(正式名称为Safari在线图书)是一个为企业、政府、教育家以及个人提供会员制的培训与参考的平台。

会员可以在该平台获取来自超过250家出版社提供的成千上万的书籍、培训视频、学习路径、交互教程、策划播放列表,这些公司包括:Prentice Hall Professional、Addison-Wesley Professional、MicrosoftPress、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley& Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FTPress、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett以及CourseTechnology,除此之外还有其他很多公司。

要获取更多信息,请访问:http://oreilly.com/safari。如何联系我们

美国:

O’Reilly Media,Inc.

1005 Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

讨论或提出关于本书的技术问题,可发邮件至bookquestions@oreilly.com。

要想更多了解我们书籍、课程、会议和新闻的信息,可以登录我们的官网:http://www.oreilly.com。

我们的Facebook账号:http://facebook.com/oreilly。

关注我们的Twitter账号:http://twitter.com/oreillymedia。

我们在YouTube上的视频:http://www.youtube.com/oreillymedia。联系作者

你可以在我的个人网站联系我,网址为https://antonopoulos.com/

本书的信息以及开放版本与翻译的信息可以在https://bitcoinbook.info/获取。

请关注我的Facebook账号https://facebook.com/AndreasMAntonopoulos。

请关注我的Twitter账号https://twitter.com/aantonop。

请关注我的领英账号https://linkedin.com/company/aantonop。

特别感谢所有的赞助人,他们支持我数月的工作。你可以访问我的赞助人网站:https://patreon.com/aantonop。致谢

这本书的出版浓缩了很多人的努力与付出。在写书的过程中,我很感激来自朋友、同事,甚至陌生人的帮助,是他们的加入与努力帮助我完成了这本关于数字货币和比特币的纯技术类书籍。

我们不可能将比特币技术与比特币社区区分开,因为这本书不仅是社区的产品,也是比特币技术的产品。我写这本书的工作自始至终都得到了整个社区的鼓励、欢呼、支持与奖励。最重要的是,这本书让我两年来成为这个极好社区的一部分,我无法用语言表达你们接纳我成为社区成员的感激之情。在写书的过程中有太多的人需要感谢,以至于无法一一列举,这些人包括我在会议、重大事件、研讨会、聚会、比萨聚会以及小型私人集会相识的人,同时还有那些在Twitter、reddit、bitcointalk.org以及GitHub上与我联系,并对本书成稿有影响的人。你在本书中找到的每个想法、类比、问题、回答以及解释,都是在我与社区人员沟通交流时产生并得到验证和优化的结果。谢谢所有支持过我的人,没有你们的支持就不会有这本书的存在。对此,我将永远心存感激。

当然,我是经过了很长一段时间才成为作家并写作了第一本书。我(在校学习)的第一语言是希腊语,因此我需要在大学一年级时学习英语写作补习课程。我要感谢英语写作老师Diana Kordas,那年是他帮助我建立了自信并提升了写作技能。随后,作为教授,在为《*NetworkWorld》杂志撰稿时,我提升了自己在数据中心方面的写作技能。我要感谢John Dix和John Gallant,他们给了我第一份写作方面的工作,让我成为《*Network World》杂志的专栏作者,还要感谢编辑Michael Cooney和同事Johna Till Johnson,是他们帮我编辑专栏文章,让它们得以发表。四年每周500字的写作经验最终给了我成为一名作家的足够信心。

还要感谢在我提交本书稿件至O’Reilly出版社时那些帮助过我的人,他们为我提供参考和稿件审阅。特别要感谢John Gallant、Gregory Ness、Richard Stiennon、Joel Snyder、Adam B.Levine、Sandra Gittlen、John Dix、Johna Till Johnson、Roger Ver以及Jon Matonis。特别感谢Richard Kagan、Tymon Mattoszko和Matthew Taylor,Richard Kagan和Tymon Mattoszko帮我审阅了本书早期稿件,MatthewTaylor帮我修改了稿件。

感谢《DNS and BIND》的作者Cricket Liu,是他将我介绍给了O’Reilly出版社。还要感谢O’Reilly的Michael Loukides和Allyson MacDonald,是他们花费数月时间帮助我出版本书。当最终稿件因为种种原因未按计划提交而错过出版截止日期时,Allyson表现得特别耐心。对于第2版,我要感谢Timothy McGovern的全程指导、Kim Cofer的耐心编辑以及RebeccaPanzer帮助插入了许多新图表。

最初一些章节的草稿是最难写的部分,因为比特币是一个很难说清楚的主题。每次研究比特币中某个主题时,我还得考虑整体的技术内容。当我努力想将主题说得简单易懂,围绕这样一个密集型技术主题展开叙述时,我不断地被卡住并有点沮丧。最终,我决定以讲述人们使用比特币的故事为主线,从而让我可以轻松地写作本书。我要感谢我的导师兼朋友Richard Kagan,是他帮助我想到了以故事方式来编写此书,让我跨过了编者的阻碍。我要感谢PamelaMorgan,他审阅了本书第1版与第2版早期草稿的每个章节,并且提出了很好的改进意见,让本书内容质量更高。同时,还要感谢San Francisco比特币开发者组织小组,还要感谢帮助测试早期材料的Taariq Lewis和Denise Terry。感谢Andrew Naugler帮助设计信息图标。

在本书编写的过程中,我在GitHub上制作了早期草稿,然后邀请公众对其进行评论。收到了100多条评论、建议、修改和捐赠等方面的回应。那些捐助者在文末的早期发布草稿的GitHub捐助者中进行了公布,并表达了我的感激之情。真诚地感谢我的GiuHub志愿者编辑Ming T.Nguyen(第1版编辑)和Will Binns(第2版编辑),他们不辞辛劳地组织、管理和解决GitHub上的pull requests、issue reports,并且执行bug修复工作。

当完成草稿撰写后,本书经历了多轮技术审阅与修改。感谢Cricket Liu和Lorne Lantz的全程审阅、评论和支持。

许多比特币开发者贡献了示例代码、审阅、评论和鼓励。感谢Amir Taaki和Eric Voskuil提供了示例代码片段和许多很好的评论。Chris Kleeschulte编写了附录E;Vitalik Buterin和Richard Kiss帮助提供椭圆曲线数学解析和实现代码;感谢GavinAndresen对本书的修订、评论和支持;感谢Michalis Kargakis的评论、捐赠和btcd简介;感谢Robin Inge修订本书的勘误,改进了第2版的印刷效果。在第2版中,我再次得到了很多比特币核心开发人员的帮助,包括让隔离见证通俗易懂的Eric Lombrozo,帮助改进交易章节的Luke-Jr,帮助审阅隔离见证和其他章节的Johnson Lau,还有其他很多要感谢的开发者。我深深地感谢帮助解释闪电网络的Joseph Poon、Tadge Dryja和Olaoluwa Osuntokun,他们还帮助我审阅文章,解答了我无法回答的问题。

我将这本书和深爱之词献给我亲爱的母亲Theresa,她在我家房子的每面墙上放满了书籍。尽管自认为是科技产品排斥者,我母亲还是在1982年给我买了第一台电脑。我的父亲Menelaos是一名土木工程师,刚在80岁时出版了他的第一本书,我的父亲也是一名科技和工程技术爱好者,他教会了我逻辑思考与分析。

感谢在写书过程中所有支持我的人。第1章比特币介绍1.1 比特币是什么

比特币既是构成数字货币生态系统基础概念和技术的总称,又是比特币网络中参与者存储和传输的货币单位。在互联网上,比特币用户主要通过比特币协议进行通信,当然也可以使用其他传输网络。比特币协议栈作为开源软件,可以在各种类型的计算设备上运行,包括笔记本电脑和智能手机,从而使得比特币更加普及。

用户通过网络进行比特币转账可以做到和传统货币一样的事,包括买卖商品,汇款给别人或机构,或者提供借贷。比特币可以在专业的交易所进行购买、出售或兑换其他货币。从某种意义上讲,比特币是互联网上完美的货币形态,因为它快速、安全且无国界。

与传统货币不同,比特币完全是虚拟的,没有物理硬币,甚至本身都不是简单数字化(比如银行卡里的存款余额算是简单数字化),比特币隐含在汇款方到收款方的转账交易中。在比特币网络中,用户用自己的密钥来证明他们对比特币的所有权,用户使用密钥对交易进行签名以解锁比特币,并通过将其转账给新的所有者来消费比特币。密钥通常保存在每个用户计算机或智能手机上的数字钱包里,拥有可以签署交易的密钥是消费比特币的唯一先决条件,用户通过密钥把控制权完全掌握在自己手里。

比特币是分布式的点对点系统,因此,并没有“中心”服务器或控制节点。比特币是通过被称为“挖矿”的流程创造出来的,“挖矿”流程涉及在打包处理比特币交易过程中矿工竞争式寻找一个数学问题的解(寻找符合条件的hash值)。比特币网络中的任何参与者(即有能运行完整比特币协议栈的设备的人)都可以作为矿工,利用其计算机的处理能力来验证和记录(打包)交易。平均每隔10分钟,就有矿工打包验证了过去10分钟内的交易(打包成一个区块),并获得本区块全新的比特币挖矿奖励。从根本上讲,正是比特币挖矿的流程代替了中央银行的货币发行和结算功能,通过分布式架构取代了中央银行的地位。

比特币协议包括内置的算法,用于协调整个网络的挖矿能力。挖矿的难度会根据有多少矿工(以及多强的计算能力)参与挖矿而进行动态调整,以保证平均每10分钟就有矿工可以成功挖矿。比特币协议还规定每4年新发行比特币的数量减半,并将所有发行的比特币总数限制在2100万以内。因此可流通的比特币数量是一个非常容易预测的曲线,到2140年将接近2100万。由于比特币递减的发行率,长期来看,比特币货币是通货紧缩的,此外比特币不能通过“增发”超过预定发行率的新钱而导致通货膨胀。

换句话说,比特币也是融合比特币协议、点对点网络和分布式计算的创新代名词,比特币货币只是这个创新的第一个应用。比特币集数十年密码学和分布式系统研究之大成,并将四个独特和强大的关键创新点组合在一起。比特币这四个创新包括:

·一个去中心化的点对点网络(比特币协议)

·一本公开的交易总账(区块链)

·一套可独立校验交易和发行货币的规则(共识规则)

·一种通过全球去中心化对有效的区块链达成共识的机制(工作量证明算法)

作为一名开发人员,我将比特币视为货币互联网,这是一个传播价值的网络,通过分布式计算来确保数字资产的所有权。比特币还有很多不那么显而易见的内容。

在本章中,我们将介绍一些主要的概念和术语,了解必需的软件,并使用比特币进行简单的交易。在接下来的章节中,我们将开始展开介绍比特币关键的技术层次,并深入了解比特币网络和协议的内部工作原理。

比特币之前的数字货币

实用的数字货币出现与密码学的发展密切相关。当使用数字货币来进行商品和服务交易时,人们自然有一些根本性疑虑。任何人接受数字货币时都有三个基本问题:

1.我怎么确定这笔钱是真实的,而不是伪造的?

2.我怎么确定这笔数字货币只能花费一次(也称为“双重支付”或者“双花”问题)?

3.我怎么确定没有人能够声称这笔钱属于他们而不是我的?

纸币发行人通过使用日益复杂的纸张和印刷技术不断与假钱问题做斗争。实体货币很容易解决双重支付问题,因为相同的纸币不能同时出现在两个地方。当然,传统货币也经常以数字方式存储和传输。在这些情况下,假钱和双重支付问题是通过中央权威机构(如央行)清算所有电子交易来处理的,中央权威机构拥有全局的流通货币信息。对于不能利用秘制墨水或全息条码的数字货币,密码学是保障用户所有权合法性的基础。具体而言,加密数字签名使用户能够对数字资产或交易进行签名来证明对该资产的所有权。采用适当的架构,数字签名也可以用于解决双重支付问题。

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

尽管这些早期的数字货币能有效工作,但它们是集中式的,因此很容易受到政府和黑客的攻击。早期的数字货币使用中心化的票据交易所定期处理所有交易,就像传统的银行系统一样。不幸的是,在大多数情况下,这些新兴的数字货币是政府担忧的目标,有些因违规起诉而最终消失,还有些由于母公司突然清盘而烟消云散。为了防止各方干预,无论是合法政府还是犯罪分子,都需要一个去中心化的数字货币来避免存在单一攻击点。比特币就是这样一个系统,通过去中心化的设计,没有任何中央权威节点或控制点可以被攻击或损坏1.2 比特币历史

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

比特币网络始于2009年,基于中本聪发布的实施指南参考,之后由其他许多程序员进行修订。为比特币提供安全性和适应性的工作量证明算法(挖矿)的算力呈指数级增长,现在超过了世界顶级计算机的整体处理能力(这个比较只是针对超级计算机SHA256的能力,超级计算机能进行通用计算,而比特币的专业矿机是定制出专门用于高速并行计算SHA256的硬件,这样的比较并不公平,只是从侧面表观比特币全网算力是非常惊人的)。比特币的总市值超过200亿美元(在2018年2月为1500亿美元),这取决于比特币对美元的汇率。网络迄今为止处理的最大交易额为1.5亿美元,即时传输并无须任何处理费用(实际上需要支付非常少的转账手续费)。

中本聪于2011年4月退出公众视线,将维护代码和网络的职责放在一个蓬勃发展的志愿者小组身上。中本聪的真实身份仍然是个谜。然而,无论是中本聪还是其他人都无法单独控制比特币系统,比特币系统基于完全公开的数学原理、开源代码以及参与者之间的共识。比特币发明本身就具有开创性,已经在分布式计算、经济学和计量经济学领域开创了新的方向。分布式计算问题的解决方案

中本聪的发明也是分布式计算当中一个古老问题的实用和新颖的解决方案,这就是“拜占庭将军”问题。简而言之,这个问题包括在不可靠和可能受损的网络上,通过交换信息来达成共识的行动方案或系统状态。中本聪使用了工作量证明的概念,在没有可信中央权威机构的情况下能达成共识,代表了分布式计算的突破,并具有除了数字货币之外的普适性。它可以用在分布式网络上达成共识,保证比如选举、彩票、资产登记、数字公证等的公平性。1.3 比特币的使用、用户及用户场景

比特币是传统货币的创新。就其核心而言,货币促进了人们之间的价值交换。因此,为了充分了解比特币及其用途,我们将从比特币用户的角度对其进行研究。此处列出的用户和他们的故事都说明了一个或多个使用场景。我们将在整本书中看到它们:

北美普通零售业

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

北美高端零售业

Carol是旧金山的艺术画廊老板。她出售昂贵的画作来换取比特币。这个故事将诠释高端零售商“51%”共识攻击的风险。

离岸合同服务

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

网店

Gabriel是一个居住在里约热内卢的有进取心的少年,他经营一家小型网店,销售比特币品牌的T恤、咖啡杯和贴纸。Gabriel太年轻了,没有银行账户,但他的父母支持他的企业家精神。

慈善捐款

Eugenia是菲律宾儿童慈善机构的主任。最近她知晓了比特币,并希望利用它来接触一群全新的国内外捐助者,为她的慈善事业筹款。她还在研究如何使用比特币快速将资金分配给有需求的地区。这个故事将展示在跨币种和跨国界的全球筹款活动中如何使用比特币,以及慈善组织如何使用开放账簿来保持公开透明。

进出口

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

挖矿

Jing是上海计算机工程专业的学生。他已经利用工程技术建立了一个“挖矿”的矿机,来挖掘比特币以增加收入。这个故事将讲述比特币的“工业”基础:用于确保比特币网络和发行新货币的专用设备。

这些故事中的每一个都基于真实的人和实际的行业,目前正在使用比特币来创建新的市场、新的行业以及解决全球经济问题的创新解决方案。1.4 入门

比特币是一种协议,可以通过使用同样协议的客户端应用程序进行访问。“比特币钱包”是比特币系统最常见的用户界面,就像Web浏览器是HTTP协议最常见的用户界面一样。比特币钱包有很多种类型,就像有很多网络浏览器一样(例如Chrome、Safari、Firefox和Internet Explorer等)。就像我们都有最喜欢的浏览器和不喜欢的浏览器,不同比特币钱包的质量、性能、安全性、隐私和可靠性也各不相同。比特币协议还有一些参考实现,其中包括一个名为“Satoshi Client”或叫“Bitcoin Core”的钱包,该钱包的最初版本是由中本聪编写实现的。1.4.1 选择比特币钱包

比特币钱包是比特币生态系统应用开发中最活跃的应用之一。虽然现在可能也有正在开发的新钱包,但去年的一些钱包已无人维护。许多钱包专注于特定的平台或特定的用途,有些更适合初学者,而有些则为高级用户提供了更多的功能。选择钱包是非常主观的,取决于使用场景和用户的专业知识。因此,不可能推荐一个特定的钱包软件来满足所有需求。然而,我们可以根据其平台和功能对比特币钱包进行分类,并对现有类型的钱包进行说明。幸运的是,在比特币钱包之间转移资金非常简单、方便、快速,所以值得尝试几种不同的钱包,直到找到符合需求的钱包。

根据运行平台,比特币钱包分类如下:

桌面钱包

桌面钱包是作为参考实现创建的第一种类型的比特币钱包,许多用户为使用比特币的功能、管理和控制而运行桌面钱包。在Windows和Mac OS等通用操作系统上运行钱包有一定的安全隐患,因为这些平台往往配置不当且不安全。

手机钱包

手机钱包是最常见的比特币钱包。能在Apple iOS和Android等智能手机操作系统上运行,这些钱包通常是新用户的理想选择。许多钱包都是为了简单易用而设计的,但也有功能齐全的钱包供高级用户使用。

网络钱包

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

硬件钱包

硬件钱包是在专用硬件上安全地运行比特币钱包的设备。它们使用USB与桌面Web浏览器或移动设备上的近场通信(NFC)进行通信,并通过专用硬件进行所有比特币相关操作,这些钱包被认为是非常安全的,适合存储大量的比特币。

纸钱包

控制比特币的密钥也可以被打印并长期存储,即使使用其他打印材料(如木材、金属等),也都被称为纸钱包。纸钱包提供了一种低技术含量但高度安全的长期存储比特币的手段。离线存储通常也被称为冷存储。

另一种对比特币钱包进行分类的方法是根据它们的自治程度以及如何与比特币网络进行交互。

全节点客户端

全节点(也称为“完整节点”)的客户端是指存储了比特币的全部历史交易记录(所有用户的所有交易)的客户端,它管理用户的钱包,并且可以直接在比特币网络上发起交易。全节点处理各方面的比特币协议,并可以独立地验证整个区块链和任何交易。全节点客户端需要消耗大量计算机资源(例如,超过200GB的磁盘,2GB的RAM),可完全自主并能独立验证交易。

轻量级客户端

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

第三方API客户端

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

结合这些分类,比特币钱包可以分成几个组合,其中最常见的三种是桌面全节点客户端、手机轻量级钱包和网络第三方钱包。不同类别之间的界限通常很模糊,因为许多钱包在多个平台上运行,并且可以采用不同的方式与比特币网络进行交互。

就本书而言,我们将演示使用各种可下载的比特币客户端,从参考实现(Bitcoin Core)到移动和网络钱包。其中一些示例将需要使用Bitcoin Core,除了作为全节点的客户端,它还可以将API暴露给钱包、网络和交易服务。如果你计划研究比特币系统中的编程接口以深度学习比特币系统,则需要运行Bitcoin Core或其他类似的客户端(请参阅3.5节)。1.4.2 快速入门

我们在1.3节中介绍的Alice不是技术行家,直到最近才从她的朋友Joe那里听说过比特币。在一次派对上,Joe再次热情地向周围的人解释比特币,并进行了演示。Alice好奇地问道她如何才能使用比特币。Joe回答,移动钱包最适合新用户,他推荐了他最喜欢的几款钱包。Alice下载Android版本的“Mycelium”,并将其安装在手机上。

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

这个屏幕中最重要的部分是Alice的比特币地址。在屏幕上它显示为一长串字母和数字:1Cdid9KFAaatwczBwBttQcw XYCpvK8h7FK。在钱包的比特币地址旁边是一个二维码,这是一种条形码,包含相同的地址信息,可以通过智能手机相机进行扫描。二维码是带有黑点和白点图案的正方形。Alice可以通过点击二维码或接收按钮将比特币地址或二维码复制到剪贴板上。在大多数钱包中,点击二维码也会放大,以便通过智能手机相机进行扫描。图1-1:Mycelium移动钱包比特币地址以1或3开头。与电子邮件地址一样,可以分享给其他比特币用户,别人可以使用地址直接将比特币发送到你的钱包。从安全角度看,比特币地址没有任何敏感信息。它可以在任何地方发布,而不会危及账户的安全。与电子邮件地址不同的是,你可以随时创建新的地址,所有这些地址的资金都可归入你的钱包。事实上,现在许多钱包会为每个交易自动创建一个新地址,以最大限度地保护用户隐私。钱包只是一个地址和解锁资金的密钥的集合。

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

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

新用户的第一个也是最困难的任务是购买一些比特币。与其他外币不同,你还不能在银行或外汇兑换处购买比特币。

比特币交易是不可撤销的。大多数电子支付网络如信用卡、借记卡、PayPal和银行账户转账都是可撤销的。对于销售比特币的人来说,这种差异带来了极高的风险,买方在收到比特币后可能会撤销电子支付,实际上欺骗了卖家。为了缓解这种风险,接受传统电子支付方式购买比特币的公司通常要求对买方进行身份验证和信用验证,这可能需要几天或几周时间。作为新用户,这意味着你不能立即使用信用卡购买比特币,或者你可以使用其他方法,就不需要耐心等待了。

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

·找一个有比特币的朋友,直接从朋友那里买一些。许多比特币用户都是以这种方式开始的,这种方法是最简单的。找到比特币持有者的一个好办法是参加Meetup.com上列出的本地比特币会议。

·使用分类广告服务网站如localbitcoins.com来查找你所在地区的卖家,在点对点交易中用现金购买比特币。

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

·在你的城市使用比特币ATM。比特币ATM是接受现金并将比特币发送到手机钱包的机器。使用Coin ATM Radar(http://coinatmradar.com/)的在线地图找到离你最近的比特币ATM。

·使用与银行账户绑定的账号在比特币交易中进行兑换。现在有很多国家都有支持当地法币与比特币兑换的交易所。汇率行情服务(如BitcoinAverage,网址为http://bitcoinaverage.com)通常会显示支持每种法币兑换的比特币交易所列表。比特币相比其他支付系统的优点之一是:如果使用得当,它能为用户提供更多的隐私保护。获取、持有和支付比特币并不要求你向第三方提供个人身份或者敏感信息。但是,如果涉及比特币与传统法币进行兑换的系统,那么就要遵守相应的国家法律法规。为了能用本国法币兑换比特币,你通常需要提供身份证明和银行信息。用户应该知道,一旦比特币地址附加到一个身份,所有关联的比特币交易也很容易识别和跟踪。这是许多用户选择维护一个与私有钱包不相关的专用兑换账户的原因之一。

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

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

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

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

Bitcoin Average(http://bitcoinaverage.com/)

能提供关于每个货币的成交量加权平均值的视图。

CoinCap(http://coincap.io/)

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

Chicago Mercantile Exchange Bitcoin Reference Rate(http://bit.ly/cmebrr)

提供可用于机构和合同引用的参考汇率,作为CME投资数据的一部分提供。

除了这些网站和应用程序之外,大多数比特币钱包还会自动转换比特币和其他货币对应的价格。在将比特币发送给Alice之前,Joe将使用自己的钱包自动计算价格。1.4.5 发送和接收比特币

Alice决定将10美元转换成比特币,以免对这种新技术冒太多的险。她给了Joe 10美元现金,打开她的Mycelium钱包应用程序,并选择接收。手机上显示了一个二维码与Alice的第一个比特币地址。

Joe在他的手机钱包上选择了发送,出现一个包含两个输入的屏幕:

·收款方的比特币地址。

·需要发送的比特币(BTC)或其当地法币(USD)的金额。

在比特币地址的输入字段中,有一个看起来像二维码的小图标。这样Joe可以用他的智能手机相机来扫描条形码,这样他就不必手工输入Alice的比特币地址,这需要非常长的时间,而且容易出错。Joe点击二维码小图标并打开智能手机相机,扫描Alice智能手机上显示的二维码。

Joe现在将Alice的比特币地址设置为收款方。Joe输入的金额为10美元,他的钱包通过获取线上的最新汇率来进行转换。当前的汇率是每个比特币100美元(在2018年2月每个比特币接近10000美元),所以Joe的钱包如图1-2所示,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分钟区块链添加一个区块。在传统的财务术语中,这被称为清算。有关比特币交易的传播、验证和清算(确认)的更多细节,请参阅第10章。

Alice现在可以自豪地称自己是这0.10 BTC的所有者了,她有权花费这些钱。在下一章中,我们将看到她第一次使用比特币进行消费,并将更详细地研究交易和传播的底层技术。第2章比特币的工作原理2.1 交易、区块、挖矿和区块链

与传统银行和支付系统不同,比特币系统以去中心化信任为基础。在比特币系统中,信任并非是通过中央信任权威机构实现,而是通过比特币系统中不同用户之间进行互动而实现,这是比特币系统的一个显著特征。在本章中,我们将从一个较高层面检视比特币,追踪记录比特币系统中的一笔交易,观察它是如何通过比特币的分布式共识机制从而被“信任”和“接受”,并最终记录在区块链上。它是一个用来记录所有交易的分布式账本。

后续的章节会深入探讨这些交易、网络和挖矿背后的技术。2.1.1 比特币概述

比特币系统是由用户、交易和矿工三方构成的。用户使用包含密钥的钱包,交易在整个网络传播,而矿工则生产出(通过竞争性计算)共识性区块链,也是所有交易的公共权威账本。

本章中的每一个例子都是基于比特币网络中的真实交易,通过从一个钱包将资金发往另一个钱包的方式模拟了用户间(Joe、Alice、Bob和Joseph)的交互。在追踪记录一宗交易通过比特币系统被记录到区块链上时,我们将利用一个区块链浏览器网站使每个步骤都可视化。区块链浏览器是一种具有比特币搜索引擎作用的网络应用,通过它你可以搜寻地址、交易和区块,还能看到它们之间的关系和流动。

常见区块链浏览器包括:

·Bitcoin Block Explorer(https://blockexplorer.com)

·BlockCypher Explorer(https://live.blockcypher.com)

·blockchain.info(https://blockchain.info)

·BitPay Insight(https://insight.bitpay.com)

以上每一个查询网站都有搜索功能,可以通过地址、交易散列值、区块号或者区块散列值,从比特币网络中检索到相应信息。针对每一个交易或者区块例子,我们都会提供一个URL供你查询并深入研究。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载