区块链的1.0时代:比特币 – 第1章 介绍

1.1 什么是比特币?

比特币是一个基于数字货币生态系统而形成的概念与技术的集合。在比特币网络中,比特币也作为参与者之间的价值储存和传递。尽管也可以使用其它传输网络,但比特币用户还是主要在因特网上,利用比特币协议相互交流。作为一款开源软件,比特币的协议栈可以在包括笔记本电脑和智能手机在内的多种设备上运行,这使得比特币技术易于获取,用于买卖商品、给组织或个人汇款,或是延长贷款期限。比特币在特殊的货币交易所可以购买、出售,以及与其他币种进行兑换。从一定意义上来说,比特币就是互联网货币的完美形态,因为它的快捷、安全以及无国界的特性。

不同于传统的货币,比特币是完全虚拟的。没有实物的货币,甚至就本质而言,也没有数字货币。比特币隐匿于发送者和接收者间价值传递的交易中。比特币用户拥有能够使他们在比特币网络中证明自己交易权的密钥,解密后可使用比特币,也可以将它购买、,出售,以及与其他币种进行兑换。由于比特币快捷、安全以及无国界的特性,在某种意义上,比特币就是互联网货币的完美形态。

用传统货币能做到的事情,用户在网络上利用比特币都可以做到,包括发送给新的接收者。这些密钥通常存储在每个用户的计算机的数字钱包里。每一笔交易都需用密钥解密,这是使用比特币的唯一先决条件,它完完全全掌握在每个用户的手中。

比特币是一个分布式的点对点网络系统。因此,没有“中央”服务器,也没有中央控制点。比特币是通过一个名为“挖矿”的过程产生的,挖矿需要在处理比特币交易的同时参与竞赛来解决一个数学问题。在比特币网络中的任何参与者(比如,任何人使用一个设备来运行完整的比特币协议栈)都是潜在的矿工,用他们电脑算力来验证和记录交易。每隔10分钟,有人能够验证过去10分钟发生的交易,作为回报,将会获得崭新的比特币。从本质上讲,比特币挖矿分散了中央银行的货币发行,也分散了其结算功能,并且能够在全球竞争中取代任何一家中央银行。

比特币协议包括了内置算法,该算法可以调节网络中的挖矿功能。矿工必须完成的任务——在比特币网络中成功地记录一个区块交易——的难度是在动态调整的,因此,无论何时有多少矿工(多少CPU)在挖矿,通常每10分钟就会有人成功。

新比特币开采出的每四年,这项协议也会减半开采速率,并限制比特币的开采总量为一个固定值:2,100万枚。其结果是,在流通中的比特币数量很容易根据预测曲线得出,将会在2140年达到2,100万枚。由于比特币的发行率是递减的,从长期来看,比特币是一种通货紧缩的货币。此外,通过超出预期发行率来“印刷”新比特币,造成通货膨胀是不可实现的。

实质上,比特币本身也是协议,是一种网络,是一种分布式计算革新的代名词。比特币通货仅是这种创新的首次应用。作为一个开发者,我看到比特币类似于互联网货币,一个通过分布式计算来传播价值和保障数字资产所有权的网络。比起初识比特币,这里将知无不言。

在本章中,我们将会从一些主要概念和术语解释开始,获取必备软件,使用比特币进行简单的交易。在接下来的章节里,我们将开始揭开使比特币成为可能的技术面纱,解释比特币网络和比特币协议的内部运行机制。

比特币之前的数字货币

切实可行的数字货币的出现是与密码学发展息息相关的。基本的挑战在于,当一个人考虑到用比特来代表可以兑换商品和服务的价值时,接受数字货币也就不足为奇。任何接受数字货币的人都面临的两个基本问题是:

  1. 我能相信这钱是真实可信的,而不是伪造的吗?
  2. 我能确定没人说这笔钱是他们的,而不是我的吗?(又名“双重支付”问题)

纸币的发行机构不断的利用日益复杂的纸张和打印技术来遏制造假问题。实物货币很容易解决双重支付问题,因为同一张纸币不可能会同时出现在两个不同的地方。当然,传统货币也经常数字化储存和数字化传输。在这些情况下,假币和双重支付问题是被中央权威机构的处理方式是清除所有的电子交易记录,该中央权威在流通中持有一种全球通货观。对于数字货币来说,不能有效利用秘制油墨印刷技术或条形全息图,密码学为用户所主张的合法性价值提供了信任的基础。具体地来说,加密数字签名能够使一个用户签署一项能够提供其资产所有权证明的数字资产或数字交易。采用适当的结构,数字签名也可以用于解决双重支付的问题。

在20世纪80年代后期,当密码学开始越来越广泛地使用并被理解时,许多研究人员开始尝试使用密码学来建立数字通货。这些早期的数字通货项目发行的数字货币,通常倚靠一种国家通货或像黄金一样的贵金属。

虽然这些早期的数字通货的运行了,他们却是中心化的,因此,他们很容易遭受到政府和黑客的攻击。早期的数字通货使用了一个中央结算所来处理所有的定期交易,就像一个传统的银行系统。不幸的是,在大多数情况下,这些新兴的数字货币成为了政府担忧的目标,最终从法律程序上消失了。另一些则是在发行这些数字货币的母公司突然违约时颓然失败了。为了坚定的抵制对手的介入,无论这些对手是合法的政府或是犯罪分子,去中心化的数字货币需要的是避免单节点攻击。比特币正是这样的系统,设计完全去中心化,不被任何中央政权或中央点控制,这样的货币系统是不会遭受攻击,也不会变得腐败。

比特币代表了数十年的密码学和分布式系统的巅峰之作,这是一个独特而强大的组合,汇集了四个关键的创新点。比特币由这些构成:

▷ 一个去中心化的点对点网络(比特币协议)
▷ 一个公共的交易账簿(区块链)
▷ 一个去中心化的数学的和确定性的货币发行(分布式挖矿)
▷ 一个去中心化的交易验证系统(交易脚本)

1.2 比特币发展史

2008年,一位化名为中本聪的人,在一篇名为《比特币:一个点对点的电子现金系统》的论文中首先提出了比特币。中本聪结合以前的多个数字货币发明,如B-money和HashCash,创建了一个完全去中心化的电子现金系统,不依赖于通货保障或是结算交易验证保障的中央权威。关键的创新是利用分布式计算系统(称为“工作量证明”算法)每隔10分钟进行一次的全网“选拔”,能够使去中心化的网络同步交易记录。这个能优雅的解决双重支付问题,即一个单一的货币单位可以使用两次。此前,双重支付问题是数字货币的一个弱点,并通过一个中央结算机构清除所有交易来处理。

根据中本聪的一篇涉及比特币网络运行的发表论文,比特币网络自从被许多其他的程序员修订之后,于2009年启动。分布式计算,为比特币提供了成倍增长的安全性和韧性,现在超过了世界顶级超级电脑的联合处理能力。根据比特币兑美元汇率,比特币的总市场估值为5至10亿美元。目前从全网来看,比特币处理的最大交易额为150亿美元,这笔交易及时处理和转账,没有缴纳任何手续费。

中本聪在2011年4月退出公众视野,将比特币代码开发与网络建设的重任留给了欣欣向荣的社区成员。而“中本聪”究竟是谁,时至今日仍然是未解之谜。然而,比特币系统的运行,既不依赖于中本聪,也不依赖于其他任何人——比特币系统依赖于完全透明的数学原理。这项发明本身就是开创性的,它已经蔓延到了分布式计算、经济学、计量经济学领域。

一个分布式计算问题的解决方案

中本聪的此项发明,对“拜占庭将军”问题也是一个可行的解决方案,这是一个在分布式计算中未曾解决的问题。简单来说,这个问题包括了试图通过在一个不可靠、具有潜在威胁的网络中,通过信息交流来达成一个行动协议共识。中本聪的解决方案是使用工作量证明的概念在没有中央信任机构下达成共识,这代表了分布式计算的科学突破,并已经超越了货币广泛的适用性。它可以用来达成去中心化的网络共识来公正选举、彩票、资产登记,以及数字化公证等等。

1.3 比特币的应用、用户和他们的故事

比特币是一项技术,但它所传递的货币从实质上来说,是一种人与人之间价值交换的基础语言。让我们通过他们的故事,来看看使用比特币的人和一些最常用的通货和协议。我们将会反复用到这些贯穿本书的故事,以此来说明现实生活中数字货币的用途,以及他们是如何通过比特币的各种技术使之成为可能的。

北美低价零售
Alice住在北加州的旧金山湾区。她已经从她的科技迷朋友口中得知了比特币,想要开始使用它。我们会跟进她的故事,来了解比特币,获取一些,并在帕洛阿尔托的Bob家咖啡店用比特币购买一杯咖啡。这个故事会从零售的消费者角度向我们介绍比特币软件,交易平台,以及基本的交易。

北美高价零售
Carol是一位旧金山艺术画廊的主人。她出售昂贵的油画来换取比特币。这个故事将介绍高额商品的零售商们所面临的“51%”攻击的风险。

离岸合同服务
Bob是帕洛阿尔托一家咖啡店的老板,正在建设一个新网站。他曾与一个住在印度班加罗尔的网站开发者Gopesh签订了协议。Gopesh已同意比特币支付。这个故事将研究使用比特币进行海外购、合约服务,以及国际电汇。

慈善捐赠
Eugenia是菲律宾一家儿童慈善机构的董事。最近,她发现了比特币,并希望利用它来和一个全新的国内外捐助群体接洽,以此为她的慈善募捐。她还研究如何使用比特币快速优化资金配置。这个故事将会演示用比特币来进行跨币种跨国界的全球融资,展示慈善组织所使用的公开透明账簿。

进口/出口
Mohammed是迪拜一位电子进口商。他试着用比特币来进行快捷支付,进口美国和中国的电子产品到阿联酋。这个故事将示范用比特币来支付大型企业间实物商品的国际收支。

比特币挖矿
Jing是上海一名计算机工程专业的学生。他建了一个用来挖比特币的矿机,使用他的专业技能来为自己创收。这个故事将审查基于比特币的“工业”:用于确保比特币网络安全和发行新货币的特殊设备。

这些故事都是根据真实行业内的真实人物原型来的,他们正在用比特币创造新市场,创造新产业,用比特币这个新兴事物来解决全球经济问题。

1.4 入门

加入比特币网络并开始使用通货,所有用户需要做的就是下载应用程序或使用在线应用程序。因为比特币是一个标准,也有许多运行比特币的客户端软件。还有一个标准客户端,也称为中本聪客户端,这是由一个开发团队管理的一个开源项目,源自于中本聪编写的初始客户端。

比特币客户端的三种主要形式是:

完整客户端
一个完整客户端,或称“全节点”,是存储所有比特币交易的整个交易历史(由每一个用户完成的每一笔交易,曾经所有的每一笔)的客户端,管理用户的钱包,并可以在比特币网络上直接开始交易。这类似于一个独立的电子邮件服务器,因为它处理着协议的各个方面,而不依赖于任何其它的服务器或第三方服务。

轻量级客户端
一个轻量级客户端存储用户的钱包,但需要依赖第三方服务器才能进行比特币交易,才能接入比特币网络。轻量级客户端不保存所有交易的完整副本,因此必须信赖第三方的服务器来获取交易确认。这就类似于一个独立的电子邮件客户端,能够通过邮箱服务器来访问一个邮箱,因为它在网络交流中依赖于一个第三方服务器。

在线客户端
在线客户端通过网页浏览器在第三方服务器上访问和储存该用户的钱包。这类似于在线邮件,因为它完全依赖于第三方服务器。

移动客户端
智能手机的移动客户端,例如基于Android系统,既可以作完整客户端运行,也可作为轻量级客户端或在线客户端。一些移动客户端是与在线客户端或桌面客户端同步的,提供跨多个设备但有一个共同的资金源的多平台钱包。

比特币客户端的选择,取决于用户想要管理资金的数目。一个完整的客户端将为用户提供最高级的管理和独立性。这样钱包的备份和安全责任就转移到了用户身上。另一种选择是在线客户端,其设置和使用是最简单的,但在线客户端的取舍还在于需衡量第三方介入的风险,因为安全性和控制权是由用户和网页服务商所共同承担的。如果一个在线钱包服务遭受了损失,就像已发生过的那样,用户们可能会失去所有的资金。反过来看,如果用户的一个完整客户端没有进行适当的备份,他们可能会因为电脑的操作失误而丢失他们的资金。

这本书的目的在于,我们将演示各种可下载的比特币客户端的使用方法,从原版客户端(中本聪客户端)到在线钱包。一些案例将使用到原版客户端,除了作为一个完整的客户端以外,也会公开钱包的API,网络和交易服务。如果您计划进入比特币系统探索编程的话,将会需要原版客户端。

1.4.1 快速入门

我们在“1.3 比特币的应用、用户和他们的故事 ”一节中介绍了Alice,她并不是技术性用户,最近才从一个朋友那听说了比特币。她通过浏览比特币官方网站bitcoin.org开始了自己的比特币之旅,在官网上,她发现了很多种可供选择的比特币客户端。她根据官网提供的建议,选择了轻量级的Multibit客户端。

Alice通过官网bitcoin.org上提供的链接,在她的电脑里下载安装了Multibit客户端。目前Multibit电脑客户端有WindowsWindows, Mac OS 和 Linux版本。

比特币钱包必须由一个密码或密令来保护。有许多试图破解弱密码的潜在威胁,所以要注意谨慎设置一个不会被轻易破解的密码。密码应使用大小写字母、数字和符号的组合,避免出现生日、球队名字等个人信息。避免使用任何能在字典里轻易找到的词语,不管这个词语是什么语言的。如果条件允许,可以利用密码生成器生成一个完全随机的12位以上的密码。请记住:比特币是一种随时能被转移到世界其他任何地方的货币。如果不加以妥善保管,会很容易被偷走。

Alice下载并安装了Multibit客户端后,打开程序就会出现一个欢迎界面,如图1-1所示:

 

图1-1 Multibit比特币客户端的欢迎界面

Multibit客户端会自动为Alice生成一个钱包和一个全新的比特币地址,点击图1-2所示的请求标签即可看到。

图1-2 Multibit客户端请求标签中Alice的新比特币地址

界面中最重要的是Alice的比特币地址。类似于电子邮件的地址,Alice可以分享这个地址,这样任何人都可以通过这个地址直接将比特币发送到的新钱包里。界面上看起来一长串的字母和数字就是地址:

1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK。

地址旁是一个二维码。这个二维码是可以被智能手机摄像头扫描到该钱包地址的条形码,即窗口右边黑白相间的方块。通过点击比特币地址或二维码旁边的复制按钮,Alice可以将它们分别复制到剪贴板。点击二维码可以将其放大,便于智能手机扫描。

Alice也可以打印出这个地址二维码给别人,这样就不用打一长串字母和数字了。

比特币地址以数字1或3开头。类似于电子邮件地址,这些地址可以分享给其他的比特币的用户,这样他们就可以直接通过这些地址发送比特币到你的钱包里。不同于电邮地址的是,你可以任意地创建新的比特币地址,这些地址都能成功地将资金转到你的钱包。钱包是多个地址和解锁资金密钥的简单集合。每笔交易你都可以使用不同的地址,这有利于提高隐私的安全性。用户可创建地址的数量几乎不受限制。

现在Alice已经准备好开始使用她的新比特币钱包了。

1.4.2 获取你的第一枚比特币

现在你还无法在银行或是外币兑换处买到比特币。截至2014年,在大多数国家,购买比特币还是相当困难的。你可以去一些专门的通货交易所,购买比特币或是出售比特币换取当地货币,交易所是以在线通货市场的方式来运营。包括以下几种:

Bitstamp
一个欧洲通货市场,通过电汇方式,支持包括欧元、美元在内的多币种交易。

Coinbase
美国比特币钱包,也是买家和卖家进行比特币交易的一个平台。 coinbase允许用户通过ACH系统来连接美国支票账户,这样易于购买和出售比特币。

这一类的数字加密货币交易所,在国家货币和加密货币夹缝中求生存。因此,会受各国法规和国际法规的制约,而且往往会具体到某单个国家或经济区,并只限于该地区的国家货币。你所选择的货币交易所,只限于你使用的本国货币,也只能是在你国范围内合法运营的交易所。类似于在银行开户,用此类服务来设置这些必要的账户需要花费数日或数周的时间,因为他们需要各种形式来了解你的客户,确认交易将符合反洗钱法。一旦你拥有了交易所的一个账户,你就可以像用代理账户购买出售外币一样的,更快捷地购买或出售比特币了。

bitcoin charts是提供价格索引的站点,一个包括数十家货币交易所其他市场数据的站点,在这里你可以找到更完整的数据。

新用户有以下四种方法来获取比特币:

▷ 找个有比特币的朋友,直接向他购买一些。很多比特币用户都是这样开始的。
▷ 利用localbitcoins.com这样的分类服务网站来寻找你所在地区的卖家,使用现金进行面对面的线下交易。
▷ 出售某种产品或服务来换取比特币。如果你是个程序员,可以出售你的编程技能。
▷ 使用你所在地区的比特币ATM机。利用CoinDesk里的在线地图来找到你附近的比特币取款机。

Alice是经朋友介绍认识比特币的,所以在等待加州通货市场上的账号被验证和激活的同时,她轻而易举的就获取了她的第一枚比特币。

1.4.3 发送和接收比特币

Alice已经创建好她的比特币钱包,准备接收资金了。她的钱包程序随机生成了一个私钥(关于私钥的详细介绍见“4.1.3 私钥“)和对应的比特币地址。这时,她的比特币地址还未在全网公布,也未在在任何比特币系统中“登记”。她的比特币地址只是一串数字,对应一个她可以掌控的资金私钥。在该地址和账户之间还没有任何交易产生,也没有任何关联。直到这个地址接收到在比特币账簿(区块链)中公布过的一笔交易时,才会成为众多可能“有效”的比特币地址之一。一旦该地址接受了一笔交易,就会变成全网所知的地址之一,Alice就可以在公开账簿中查询余额了。

Alice和Joe约在当地的一个饭店里会面,正是Joe把比特币介绍给了Alice的。这样Alice就可以用美金向Joe换取一些比特币,让Joe发送一些比特币到她的账户里。她带来了打印版的比特币地址和钱包二维码。从安全角度来说,比特币地址没什么特别机密的。她可以在任何地方公布自己的地址,而不用担心帐户安全。

Alice只想兑换10美元的比特币,免得在这项新技术上冒险花太多钱。所以她给了Joe 10美元和她地址的打印件,这样Joe就可以给她发送等值的比特币了。

接下来Joe需要弄清楚汇率,以便于发送给Alice相应数额的比特币。有很多应用和网站都会提供当前的市场汇率,下列是一些最流行的:

Bitcoin Charts
Bitcoin Chart 是一个市场数据服务网站,显示了全球众多交易所的比特币市场汇率,以当地不同的汇率来进行结算。

Bitcoin Average
Bitcoin Average是一个提供每个币种的交易量加权平均价格的简单视图网站。

ZeroBlock
ZeroBlock是一个免费的安卓和iOS应用程序,可以显示不同交易所的比特币价格。(见图1-3)

Bitcoin Wisdom
另一个市场数据索引服务站。

图1-3 ZeroBlock,一款基于安卓和iOS系统的比特币市场汇率应用程序

Joe使用上述的程序或网站中的其中一个,查到比特币的价格约为每个比特币价值100美元左右。按照这个汇率,Alice给了他10美元,作为交换,他应当给Alice 0.1个比特币,即10,000,000聪。

Joe查到一个市场价后,打开自己的手机钱包应用,选择“发送”比特币。

图1-4 Blockchain 手机钱包的比特币发送界面

例如,如果是在苹果手机上使用Blockchain手机钱包,他会看见屏幕上要求输入:

▷ 对方的收款地址
▷ 需要发送的比特币数量

在比特币地址的输入栏,有一个看起来像二维码的小图标。Joe可以用他的智能手机摄像头扫描条形码,而不用再输入Alice的比特币地址(1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK)了,不用再打出这个又长又繁琐的地址。Joe轻击二维码图标,启动智能手机的摄像头,然后扫描Alice带来的二维码打印版。手机钱包程序会填好比特币地址,Joe可以通过比较这个地址和Alice打印的地址中的几个数字,来确认已正确地扫描。

接着Joe输入了交易的比特币金额,0.1比特币。他仔细检查,确保已经输入了正确的金额,因为他马上要发送这些钱了,任何一点点的小失误都会导致发送到错误的地址。最后,他按下了发送键来完成这笔交易。Joe的手机钱包会创建一笔交易,将Joe的钱包里的0.10比特币发送到Alice提供的地址,利用Joe的私钥来签名这笔交易。这就公告了比特币全网,Joe已经授权允许从他的一个地址转账比特币到Alice的新地址。由于交易是通过P2P网络协议传输,它会迅速在整个比特币网络传播。不到一秒钟,网络中大多数连接良好的节点都会收到该交易信息,并首次公布Alice的地址。

如果Alice手边有智能手机或笔记本电脑,她也能看到这笔交易。比特币账簿—一个不断膨胀的文件记录,记载了每一笔曾发生过的比特币交易—是公开的,意味着她可以查看所有曾经使用该地址的记录,可以查看是否有人朝这个账户发送了比特币。她只要在blockchain.info网站的搜索框中,输入她自己的地址,就可以轻而易举的知晓了。网页会显示出该地址所有的交易记录。Joe点击发送后,0.10比特币会很快转到她的钱包里,如果Alice正看这个页面,她就会发现网页更新了这笔新交易信息。

确认

起初,Alice的地址会显示Joe发出这笔的交易为“未确认”,这意味着这笔交易已经被广播到网络,但是尚未列入比特币交易记录账簿,即区块链中。总的来说,交易必须由一个矿工“开采”,交易是包括在区块中的。当新区块创建时,大约十分钟左右,该区域内的交易就会被全网接受为“已确认”,区块中的比特币也都能使用。交易可以立即被其他人看到,但只有当其被包含在新开采的区块中,才是“被信任的”。

现在Alice可以自由支配她所有的0.10个比特币了,感觉很是自豪。在下一章中,我们将看看她第一次使用比特币支付,并会更细致地了解交易和广播的相关技术。

附录1 交易脚本的操作符、常量和符号
附录2 比特币改进协议
附录3 pycoin库、ku程序和tx交易程序
附录4 sx工具下一些的命令

本文原链接:http://zhibimo.com/read/wang-miao/Mastering-Bitcoin/Chapter01.html