精通比特币 – 第2章 比特币的原理

2.1 交易、区块、挖矿和区块链

与传统银行和支付系统不同,比特币系统是以去中心化信任为基础的。不同于中央信任权威系统,在比特币中,信任是由比特币系统中不同参与者之间交互来达成的一种自然属性。在本章中,我们将从一个较高层面检视比特币,通过追踪一笔比特币系统中的单独交易,来看看它在比特币分布式共识机制中变得“被信任”和被接受的情形,以及最终成功地被存储到区块链(区块链是一个分布式的公共账簿,包含所有发生在比特币系统中的交易)。
书中每一个例子都是比特币网络中发生的真实交易,通过将资金从一钱包发送到另一钱包来模拟用户(Joe、Alice和Bob)间的交互。我们在追踪一笔通过比特币网络和区块链的交易时,将用到一些区块链数据库查询网站使每个步骤可以方便在网页上直接被呈现。提供区块链数据查询的网站就像是一个比特币的搜索引擎,你可以搜索比特币的地址、交易和区块,以及可以看他们之间的关系和资金流动。
常见的区块链数据查询网站包括:
Blockchain info
Bitcoin Block Explorer
insight
blockr Block Reader
以上每一个查询网站都有搜索功能,可以通过地址,交易哈希值或区块号,搜索到在比特币网络和区块链中对应的等价数据。我们将给每个例子提供一个链接,可以直接带你到相关条目,方便你做详细研究。

2.1.1 比特币概述


图2-1 比特币概述

如图2-1所示的概述图中,我们可以看到比特币系统由用户(用户通过密钥控制钱包)、交易(每一笔交易都会被广播到整个比特币网络)和矿工(通过竞争计算生成在每个节点达成共识的区块链,区块链是一个分布式的公共权威账簿,包含了比特币网络发生的所有的交易)组成。在本章中,我们将通过追踪在网络上传输的一笔交易,从整个比特币系统的的视角检视各个部分之间的交互。后续章节将详细阐述钱包、挖矿、商家系统背后的技术细节。

2.1.2 买咖啡

在之前章节里,Alice是一名刚刚获得第一枚比特币的新用户。在“1.4.2 获取你的第一枚比特币 ”一节中,Alice和她的朋友Joe会面时,用现金换取了比特币。由Joe产生的这笔交易使得Alice的钱包拥有了0.10比特币。现在Alice将第一次使用比特币在加利福尼亚州帕罗奥图的Bob咖啡店买一杯咖啡。Bob咖啡店给他的销售网点系统新增加了一个比特币支付选项,价格单上列的是当地货币(美元)的售价,但在收银台,顾客可以选择用美元或比特币支付。此时,Alice点了杯咖啡,然后Bob将交易键入到收银机,之后销售系统将按照当前市场汇率把美元总价转换为比特币,然后同时显示两种货币的价格,并显示一个包含这笔交易支付请求的二维码(如图2-2所示):


图2-2

总价:
$1.50 USD
0.0150 BTC

这个二维码中的URL是:

bitcoin:1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA?amount=0.015&label=Bob%27s%20Cafe&message=Purchase%20at%20Bob%27s%20Cafe根据BIP0021的定义,此URL的意思是:A bitcoin address: "1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA"The payment amount: "0.015"A label for the recipient address: "Bob's Cafe"A description for the payment: "Purchase at Bob's Cafe"


与一个简单包含目的比特币地址的二维码不同,当前支付请求的是一个二维编码过的URL,它包含有一个目的地址,一笔支付金额,和一个像“Bob咖啡”这样的交易描述。这使比特币钱包应用在发送支付请求时,可以预先填好支付用的特定信息,给用户显示一种友好易懂的描述。你可以用比特币钱包应用扫描这个二维码来看Alice可能看到的信息。

Bob说到,“总共1.50美元,或15毫比特币”
Alice用她的智能手机扫描了显示的条形码。她的智能手机显示一笔给Bob咖啡的0.0150比特币的支付请求,然后她按下发送键授权了这笔支付。在几秒钟时间内(大约与信用卡授权所需时间相同)Bob将会在收银台看到这笔交易,并完成交易。
在接下来的章节中,我们将更详细地检视这笔交易,观察Alice的钱包是怎样构建交易,交易又是怎样在网络中广播、怎样被验证,以及Bob在后续交易中怎样消费那笔钱。


从千分之一比特币(一毫比特币)到一百万分之一比特币(称为一聪比特币),比特币网络可以处理任意小额交易。在本书中,我们将用“比特币”这个术语来表示任意数量的比特币货币,从最小单元(1聪)到可被挖出的所有比特币总数(21,000,000)。

2.2 比特币交易

简单来说,交易告知全网:比特币的持有者已授权把比特币转帐给其他人。而新持有者能够再次授权,转移给该比特币所有权链中的其他人,产生另一笔交易来花掉这些比特币,后面的持有者在花费比特币也是用类似的方式。
交易就像复式记账法账簿中的行。简单来说,每一笔交易包含一个或多个“输入”,输入是针对一个比特币账号的负债。这笔交易的另一面,有一个或多个“输出”,被当成信用点数记入到比特币账户中。这些输入和输出的总额(负债和信用)不需要相等。相反,当输出累加略少于输入量时,两者的差额就代表了一笔隐含的“矿工费”,这也是将交易放进账簿的矿工所收集到的一笔小额支付。如图2-3描述的是一笔作为记账簿记录的比特币交易。


图2-3

交易也包含了每一笔被转移的比特币(输入)的所有权证明,它以所有者的数字签名形式存在,并可以被任何人独立验证。在比特币术语中,“消费”指的是签署一笔交易:转移一笔以前交易的比特币给以比特币地址所标识的新所有者。


交易是将钱从交易输入移至输出。输入是指钱币的来源,通常是之前一笔交易的输出。交易的输出则是通过关联一个密钥的方式将钱赋予一个新的所有者。目的密钥被称为是安全锁(Encumbrance)。这样就给资金强加了一个要求:有签名才能在以后的交易中赎回资金。一笔交易的输出可以被当做另一笔新交易的输入,这样随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链(如图2-4)。

图2-4

Alice支付Bob咖啡时使用一笔之前的交易作为输入。在以前的章节中,Alice从她朋友Joe那里用现金换了点比特币。那笔交易有一些比特币被Alice的密钥锁定(阻塞)。在她支付Bob咖啡店的新交易中使用了之前的交易作为输入,并以支付咖啡和找零作为新的输出。交易形成了一条链,最近交易的输入对应以前交易的输出。Alice的密钥提供了解锁之前交易输出的签名,因此向比特币网络证明她拥有这笔钱。她将咖啡的支付附到Bob的地址上,同时“阻塞”那笔输出,指明要求是Bob签名才能消费这笔钱。这就描述了在Alice和Bob之间钱的转移。上图展示了从Joe到Alice再到Bob的交易链。

2.2.1 常见的交易形式

最常见的交易形式是从一个地址到另一个地址的简单支付,这种交易也常常包含给支付者的“找零”。一般交易有一个输入和两个输出,如图2-5所示:


图2-5

另一种常见的交易形式是集合多个输入到一个输出(如图2-6)的模式。这相当于现实生活中将很多硬币和纸币零钱兑换为一个大额面钞。像这样的交易有时由钱包应用产生来清理许多在支付过程收到的小数额的找零。


图2-6

最后,另一种在比特币账簿中常见的交易形式是将一个输入分配给多个输出,即多个接收者(如图2-7)的交易。这类交易有时被商业实体用作分配资金,例如给多个雇员发工资的情形。


图2-7

2.3 交易的构建

Alice的钱包应用知道如何选取合适的输入和输出以建立Alice所希望的交易。Alice只需要指定目标地址和金额,其余的细节钱包应用会在后台自动完成。很重要的一点是,钱包应用甚至可以在完全离线时建立交易。就像在家里写张支票,之后放到信封发给银行一样,比特币交易建立和签名时不用连接比特币网络。只有在执行交易时才需要将交易发送到网络。

2.3.1 获取正确的输入

Alice的钱包应用首先要找到一些足够支付给Bob所需金额的输入。大多数钱包应用维护着一个含有用钱包自己密钥锁定的“未消费交易输出”小型数据库。因此Alice的钱包会包含她用现金从Joe那里购买的比特币的交易输出副本(参见在“1.4.2 获取你的第一枚比特币 ”一节)。完整客户端含有整个区块链中所有交易的所有未消费输出副本。这使得钱包即能拿这些输出构建交易,又能在收到新交易时很快地验证其输入是否正确。然而,完整客户端占太大的硬盘空间,所以大多数钱包使用轻量级的客户端,只保存用户自己的未消费输出。
如果钱包客户端没有某一未消费交易输出,它可以通过不同的服务者提供的各种API或完整索引节点的JSON PRC API从比特币网络中拿到这一交易信息。例子2-1展示了用HTTP GET命令对一个特定URL建立了一个RESTful API的请求。这个URL会返回一个地址的所有未消费交易输出,以提供给需要这些信息的任何应用作为建立新交易的输入而进行消费。我们用一个简单的HTTP命令行客户端 cURL来获得这个响应数据。
例2-1 查找Alice的比特币地址所有的未消费的输出

$ curl https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK

例2-2 查找返回的响应数据

{  "unspent_outputs": [    {      "tx_hash":"186f9f998a5...2836dd734d2804fe65fa35779",      "tx_index":104810202,      "tx_output_n":0,      "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",      "value":10000000,      "value_hex":"00989680",      "confirmations":0    }  ]}

例2-2的响应数据显示了在Alice的地址 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK 上面有一个未消费输出(还未被兑换)。这个响应包含一个交易的索引。而从Joe那里转过来的未消费输入就包含在这个交易里面,它的价值是一千万聪(satoshi),即 0.10比特币。通过这个信息,Alice的钱包应用就可以创建新的交易将钱转账到新地址。


点击查看Joe和Alice间的交易信息

如你所见,Alice的钱包在单个未消费的输出中有足够的比特币支付一杯咖啡。假如不够的话,Alice的钱包应用就不得不搜寻一些小的未消费输出,像是从一个存钱罐里找硬币一样,直到找到足够支付咖啡的数量。在两种情境下,可能都需要找回零钱,而这些找零也会是钱包所创建的交易的输出组成部分。我们会在下一节会有所描述。

2.3.2 创建交易输出

交易的输出会被创建成为一个包含这笔数额的脚本的形式,只能被引入这个脚本的一个解答后才能兑换。简单点说就是,Alice的交易输出会包含一个脚本,这个脚本说 “这个输出谁能拿出一个签名和Bob的公开地址匹配上,就支付给谁”。因为只有Bob的钱包的私钥可以匹配这个地址,所以只有Bob的钱包可以提供这个签名以兑换这笔输出。因此Alice会用需要Bob的签名来包装一个输出。
这个交易还会包含第二个输出。因为Alice的金额是0.10比特币的输出形式,对0.015 比特币一杯的咖啡来说太多了,需要找Alice 0.085比特币的零钱。Alice钱包创建给她的零钱的支付就在付给Bob的同一个交易里面。可以说,Alice的钱包将她的金额分成了两个支付:一个给Bob,一个给自己。她可以在以后的交易里消费这笔零钱输出。
最后,为了让这笔交易尽快地被网络处理,Alice的钱包会多付一小笔费用。这个不是明显地包含在交易中的;而是通过输入和输出的差值所隐含的。如果Alice创建找零时只找 0.0845比特币,而不是 0.085比特币的话,这里就有剩下 0.0005比特币(50万聪) 。因为加起来小到 0.10,所以这个 0.10 比特币的输入就没有被完整的消费了。这个差值会就被矿工当作交易费放到区块的交易里,最终放进区块链帐薄中。
这个交易的结果信息可以用区块链数据查询站点看到,如图2-8所示。


图2-8

点击查看Alice支付Bob咖啡的交易的信息

2.3.3 将交易放到总账簿中

这个被Alice钱包应用创建的交易大小为258字节,包含了金额未来所属需要的全部信息。现在,这个交易必须要被传送到比特币网络中以成为分布式账簿(区块链)的一部分。在下一节里,我们来看下一个交易如何成为新区块的一部分,以及区块是如何被挖矿构建的。最后,我们会看看新区块被加进区块链后,是如何随更多区块的添加而增加可信度的。

2.3.3.1 交易的传送

因为这个交易包含处理所需的所有信息,所以这个交易是被如何或从哪里传送到比特币网络的就无所谓了。比特币网络是由参与的比特币客户端联接几个其他比特币客户端组成的P2P网络。比特币网络的目的是将交易和区块传播给所有参与者。

2.3.3.2 如何传播

Alice的钱包应用可以发送新的交易给其它任意一个已联接到互联网的比特币客户端,不论其是由有线网、WiFi、还是通过手机联接的。她的钱包不必直接连着Bob的比特币钱包,且她不必使用咖啡厅提供的网络联网,虽然这两者都是可能的。任何比特币网络节点(其它客户端)收到一个之前没见过的有效交易时会立刻将它转发给联接到自身的其它节点。因此,这个交易迅速地从P2P网络中传播开来,几秒内就能到达大多数节点。

2.3.3.3 Bob的视角

如果Bob的比特币钱包应用是直接连接Alice的钱包应用的话,Bob的钱包应用也许就是第一个收到这个交易的节点。然而,即使Alice的交易是从通过其它节点发过来的,一样可以在几秒钟内到达Bob钱包应用这里。Bob的钱包会立即确认Alice的交易是一个收入支付,因为它包含能用Bob的私钥兑换的输出。Bob的钱包应用也能够独立地用之前未消费输入来确认这个交易是正确构建的,并且由于包含足够交易费会被下一个区块包含进去。这时Bob就可以以一个很小的风险假定这个交易会很快被加到区块且被确认。


一个对比特币交易的常见误解是它们必须要等10分钟后被确认加进一个新区块,或等60分钟以得到六次确认后才是有效的。虽然这些确认可以确保交易已被整个网络接受,但对于像一杯咖啡这样的小额商品来说就没有必要等待那么长时间了。一个商家可以免确认来接受比特币小额支付。这样做的风险不比接受一个不是用有效身份证领取或没有签名的信用卡的风险更大,而后者是现在商家常做的事情。

2.4 比特币挖矿

这个交易现在在比特币网络上传播开来。但只有被一个称为挖矿的过程验证且加到一个区块中之后,这个交易才会成为这个共享账簿(区块链)的一部分。关于挖矿的详细描述请见第8章
比特币系统的信任是建立在计算的基础上的。交易被包在一起放进区块中时需要极大的计算量来证明,但只需少量计算就能验证它们已被证明。挖矿在比特币系统中起着两个作用:
▷ 挖矿在构建区块时会创造新的比特币,和一个中央银行印发新的纸币很类似。每个区块创造的比特币数量是固定的,随时间会渐渐减少。
▷ 挖矿创建信任。挖矿确保只有在包含交易的区块上贡献了足够的计算量后,这些交易才被确认。区块越多,花费的计算量越大,意味着更多的信任。
描述挖矿的一个好方法是将之类比为一个巨大的多人数独谜题游戏。一旦有人发现正解之后,这个数独游戏会自动调整困难度以使游戏每次需要大约10分钟解决。想象一个有几千行几千列的巨大数独游戏。如果给你一个已经完成的数独,你可以很快地验证它。然而,如果这个数独只有几个方格里有数字其余方格都为空的话,就会花费非常长的时间来解决。这个数独游戏的困难度可以通过改变其大小(更多或更少行列)来调整,但即使它非常大时验证它也是相当容易的。而比特币中的 “谜题” 是基于哈希加密算法的,其展现了相似的特性:非对称地,它解起来困难而验证很容易,并且它的困难度可以调整。
在 “1.3 比特币的应用、用户和他们的故事”一节中,我们提到了一个叫Jing的在上海学计算机工程的学生。Jing在比特币网络中扮演了一个矿工的角色。大概每10分钟,Jing和其他上千个矿工一起展开一场对一个区块的交易寻找正解的全球竞赛。为寻找这个解,也被称为工作量证明,整个网络需要具有每秒亿万次哈希计算的能力。这个工作量证明算法指的用SHA256加密算法不断地对区块头和一个随机数字进行哈希计算,直到出现一个和预设值相匹配的解。第一个找到这个解的矿工会赢得这局竞赛并会将此区块发布到区块链中。
Jing从2010年开始挖矿,当时他使用一个非常快的桌面电脑来为新区块寻找正解。随着更多的矿工加入比特币网络中,寻找谜题正解的困难度迅速增大。不久,Jng和其他矿工升级成更专业的硬件,比如游戏桌面电脑或控制台专用的高端独享图像处理单元芯片(即显卡GPU)。在写这本书的时候,解题已经变得极其困难,只有使用集成了几百个挖矿专用算法硬件并能同时在一个单独芯片上并行工作的专用集成电路(ASIC)挖矿才会营利。Jing同时加入了一个类似彩票奖池的、能够让多个矿工共享计算力和报酬的矿池。Jing现在运行两个通过USB联接的ASIC机器每天24小时不间断地挖矿。他卖掉一些挖矿所得到的比特币来支付电费,并可以通过营利获得一些收入。作为专用挖矿软件的后台,他的计算机里安装了一个比特币索引客户端,名称为bitcoind。

2.5 区块中的挖矿交易记录

网络中产生的一笔交易直到成为整个比特币大账簿——区块链的一部分时才会被确认有效。平均每10分钟,矿工会将自上一个区块以来发生的所有交易生成一个新的区块。新交易不断地从用户钱包和应用流入比特币网络。当比特币网络上的节点看到这些交易时,会先将它们放到各自节点维护的一个临时的未经验证的交易池中。当矿工构建一个新区块时,会将这些交易从这个交易池中拿出来放到这个新区块中,然后通过尝试解决一个非常困难的问题(也叫工作量证明)以证明这个新区块的合法性。挖矿过程的细节会在“8.1 简介”一节中详加描述。
这些交易被加进新区块时,以交易费用高的优先以及其它的一些规则进行排序。矿工一旦从网络上收到一个新区块时,会意识到在这个区块上的解题竞赛已经输掉了,会马上开始下一个新区块的挖掘工作。它会立刻将一些交易和这个新区块的数字指纹放在一起开始构建下一个新区块,并开始给它计算工作量证明。每个矿工会在他的区块中包含一个特殊的交易,将新生成的比特币(当前每区块为25比特币)作为报酬支付到他自己的比特币地址。如果他找到了使得新区块有效的解法,他就会得到这笔报酬,因为这个新区块被加入到了总区块链中,他添加的这笔报酬交易也会变成可消费的。参与矿池的Jing设置了他的软件,使得构建新区块时会将报酬地址设为矿池的地址。然后根据各自上一轮贡献的工作量将所得的报酬分给Jing和其他参与矿池挖矿的矿工。
Alice的交易被网络拿到后放进未验证交易池中。因为包含足够的交易费,它被Jing的矿池放到了生成的新区块中。大约在Alice的钱包第一次将这个交易发送出来五分钟后,Jing的ASIC矿机发现了新区块的正解并将之发布为第277,316号区块,包含419个其它交易。Jing的ASIC矿机将这个新区块发布到网络上后,其它矿机就会验证它,并投身到构建新区块的竞赛中。
你可以查看包含Alice交易记录的这个区块的信息。
几分钟后,第277,317号新区块诞生在另一个挖矿节点中。因为这个新区块是基于包含Alice交易的第277,316号区块的,在这个区块的基础上增加了更多的计算,因此就加强了这些交易的可信度。包含Alice交易的区块对这个交易来说算一次”证明”。基于这个区块每产生一个新区块,对这个交易来说就会增加了一次”证明”。当区块一个个堆上来时,这个交易变得指数级地越来越难被推翻,因此它在网络中得到更多信任。


图2-9

在图2-9中,我们可以看到包含Alice的交易的第277,316号区块。在它之下有377,361个区块(包括0号区块),像链子一样一个连着一个(区块链),一直连到0号区块,即创世区块。随着时间变长,这个区块链的高度也随之增长,每个区块和整个链的计算复杂度也随之增加。包含Alice的交易的区块后面形成的新区块使得信任度进一步增加,因为他们叠加了更多的计算在这个越来越长的链子上。按惯例来说,一个区块获得六次以上“证明”时就被认为是不可撤销的了,因为要撤销和重建六个区块需要巨量的计算。在第8章我们会详细描述挖矿和信任建立的过程。

2.6 消费这笔交易

既然Alice的这笔交易已经成为区块的一部分被嵌入到了区块链中,它就成为了整个分布式比特币账簿的一部分并对所有比特币客户端应用可见。每个比特币客户端都能独立地验证这笔交易是有效且可消费的。全索引客户端可以追钱款的来源,从第一次有比特币在区块里生成的那一刻开始,按交易与交易间的关系顺藤摸瓜,直到Bob的交易地址。轻量级客户端通过确认一个交易在区块链中且在它后面有几个新区块来确认一个支付的合法性。这种方式叫做简易支付验证(参见“6.7 简易支付验证(SPV)节点”)。
Bob现在可以将此交易和其它交易的结果信息作为输入,创建新的所有权为其他人的交易。这样就实现了对此交易的消费。举个例子,Bob可以用Alice支付咖啡的比特币转账给承包商或供应商以支付相应费用。大多数情况下,Bob用的比特币商户端会将多个小额支付聚合成一个大的支付,也许会将一整天的比特币收入聚合成一个交易。这样会将多个支付合成到咖啡店财务账户的一个单独地址。图2-6为交易集合示例。
当Bob花费从Alice和其他顾客那里赚得的比特币时,他就扩展了比特币的交易链条。而这个链条会被加到整个区块链账簿,使所有人知晓并信任。我们假定Bob向在邦加罗尔的网站设计师Gopesh支付一个新网页的设计费用。那么区块交易链会如图2-10所示。


图2-10

 

==目录==

简介
前言
第1章 介绍
第2章 比特币的原理
第3章 比特币客户端
第4章 密钥、地址、钱包
第4章 高级密钥和地址
第5章 交易
第6章 比特币网络
第7章 区块链
第8章 挖矿与共识
第8章 区块链分叉、矿池、共识攻击
第9章 竞争币、竞争块链和应用程序
第10章 比特币安全
附录1 交易脚本的操作符、常量和符号
附录2 比特币改进协议
附录3 pycoin库、ku程序和tx交易程序
附录4 sx工具下一些的命令
本文原链接:http://zhibimo.com/read/wang-miao/Mastering-Bitcoin/Chapter02.html

精通比特币 – 第1章 介绍

第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个比特币了,感觉很是自豪。在下一章中,我们将看看她第一次使用比特币支付,并会更细致地了解交易和广播的相关技术。

精通比特币 – 前言

关于本书

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

阅读对象

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

封面故事

在群居生物物种中,切叶蚁表现出了高度复杂行为的物种特征。但是,群落中的每一只蚂蚁个体仅仅遵循一些社会互动和化学气味(即信息素)交换的简单规 则。维基百科提到:“切叶蚁形成地球上仅次于人类的最为庞大且复杂的动物社会。”实际上,切叶蚁不吃叶子,而是使用叶子制造一种真菌来充当蚁群主要食物来 源。意识到了吗?它们在耕作!
虽然切叶蚁形成的是阶级社会,且依靠蚁后繁衍后代,但是在蚁群中不存在中央集权体制或领导人。通过切叶蚁我们可以看到,群落中数百万成员所展现的高度智能且复杂的行为是社会网络中的个体互动这一性质的凸显。
大自然向我们证明,去中心化体制具有弹性并能创造出意想不到的复杂性和难以想象的精妙,而不需要中央集权体制、等级制度或复杂的组织结构。
比特币网络正是这样一个高度复杂的去中心化的可信网络,能够支撑无数财务流程。然而,比特币网络的每一个节点都遵循着一些简单的数学准则。节点间的 相互作用促成引起了组织的复杂行为,而并不是任何某个单一节点自身具有复杂性和可信性。就像蚁群一样,比特币的弹性网络是一个由众多遵循简单准则的简单节 点所组成的弹性网络,这些简单的节点准则聚合在一起可以完成惊人的事情,而不需要任何中枢协调。

本书惯例

本书中的印刷惯例如下:
此图标表示小贴士,建议,或一般性注解。
此图标表示预警或警告。

代码示例

本书示例是基于类Unix操作系统(例如Linux或Mac OS X)的命令行,用Python,C++编程语言来说明的。全部代码段均可在Github主代码库中的code子目录获得。读者可以通过GitHub创建自己的代码分支,尝试书中示例,或者提交代码更正。
所有代码段在大多数操作系统上都可以通过最小化安装对应语言的编译器和解释器来重现。在必要的地方,本书还提供了基本的安装指令以及每步指令输出的结果。
为了便于打印,本书重新格式化了部分代码段和代码输出。在所有此类例子中,每行代码以反斜杠(\)字符和换行符分开。当你需要尝试这些示例时,请删除这两个字符的,把被分隔的两行重连起来,就可以看到与例子中一致的结果了。
本书所有代码段尽可能地采用实值计算,因此你可以通过重复构建本书提供的代码示例,用你自己写的代码计算出相同的结果。譬如,书中出现的私钥和对应 的公钥及地址也都是真实存在的。示例中的所有交易、区块和区块链均被记录在实际的比特币区块链中,是公共账目的一部分,因而你可以在任何比特币系统中检查 它们。

使用代码示例

本书的目的是帮助你完成工作。总的来说,你可以在你的程序和文档中使用本书的代码示例。除非你要复制代码的关键部分,否则不需要联系我们获得许可。 例如,使用程序中的几段代码,或者引用本书及代码来回答问题是不需要获准的;而售卖或分发包含O’Reilly书中代码示例的光盘,或者将大量书中代码合 并于你的产品或文档则必须获得我们的许可。
我们鼓励、但不强制要求您在引用本书时表明出处。书目引用格式通常包括书名、作者、出版商、ISBN。例如:“精通比特 币,Andreas•M•Antonopoulos (O’Reilly)。版权2015 Andreas•M•Antonopoulos, 978-1-449-37404-4.”
本书某些版本提供了开源许可,如CC-BY-NC,这种情况下,开源许可条款适用。
如果你觉得你对本书代码示例的使用超出了合理范围或上述许可,请随时与我们联系:permissions@oreilly.com.

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

精通比特币 – 简介

《精通比特币》作者是Andreas M. Antonopoulos 。本书会为你参与这个货币网络提供必备知识,引导你进入看似复杂的比特币世界。无论你是正在构建下一个杀手级应用、投资创业,还是单纯对技术好奇,这本实用的书都是你不可或缺的阅读材料。
 

精通比特币

作者:Andreas M Antonopoulos

Andreas M. Antonopoulos 是一位著名的技术专家和连续创业企业家,比特币界最著名和倍受尊敬的人物之一。身为一名迷人的公共演说家、教师和作家,他善于把复杂的问题变得简单而易于 理解。作为一名顾问,他则帮助初创者认知、评估并指引减小安全和业务风险。
Andreas M. Antonopoulos 的成长和互联网密不可分,青少年时期,他便在自己希腊的家中创办了他的首家公司——一个早期电子信息服务系统和原始的互联网服务提供商。他取得了伦敦大学 学院的电脑科学学位、数据通信学位以及分布式系统学位,该学校最近跻身于全球大学排名前十。移居美国后,Andreas M. Antonopoulos 和别人合办了一家成功的技术研究公司,管理公司的他,在网络、安全、数据中心和云计算方面,为许多世界五百强公司的首席执行者提供建议。他撰写了200多 篇关于安全、云计算和数据中心的文章,已经在世界范围内被印制出版,并在多家报刊发表。他还持有两项网络和安全领域的专利权。
1990年,Andreas M. Antonopoulos 开始在私人、专业和学术等诸多场合讲授IT话题。从五名企业高管的会议室,到千人参与的大型会议,他不断磨练着自己的演讲水平。超过400次的锻炼,不仅 使他成为了为人津津乐道的教授,还铸就了他世界级演讲大师的美名。2014年,第一所授予数字货币学士学位的尼科西亚大学邀请他来校任教。上任后,他与别 人合作开设了这门课程。他还参与讲授了数字货币导论,后者成了为尼科西亚大学的一门大型网络公开课(MOOC)。
作为一名比特币企业家,Andreas M. Antonopoulos 已成立了不少比特币企业,并推出了一些社区开源项目。他担任好几家比特币和加密货币公司的顾问。他既是一名出版作家,发表了大量关于比特币的文章和博文; 也是一档流行博客“Let’s Talk Bitcoin”的固定主持人;还是在全球各地的技术安全会议上演说的常客。

译者:

薄荷凉幼;陈萌琦;陈姝吉;程鹏;程西园;达文西;吉鸿帆;李丹;李润熙;李凌豪;李昕阳;刘畅;吕新浩;马峰;牛东晓;秦彤;邱頔;邱蒙;戎如香;史磊;汪海波;王宏钢;辛颖;杨兵;尹文东;余龙;张林;张琦张大嫂;张亚超;张泽铭;赵冬帅;赵余;YANG YANG


简介

想要加入一场颠覆金融世界的技术革命吗?《精通比特币》会为你参与这个货币网络提供必备知识,引导你进入看似复杂的比特币世界。无论你是正在构建下一个杀手级应用、投资创业,还是单纯对技术好奇,这本实用的书都是你不可或缺的阅读材料。
比特币,作为第一个成功的去中心化数字货币,尽管还处在起步阶段,却已经催生了数十亿美元的全球性经济体。它对任何具备相应知识和参与热情的人都是开放的。《精通比特币》会为您提供必要的知识,但请各位读者自备热情。
本书包括:
▷ 针对非技术用户、投资者以及企业高管,概括性地介绍比特币
▷ 针对开发人员、工程师以及软件系统架构师,介绍比特币和加密货币的技术基础
▷ 详细介绍比特币去中心化网络、点对点体系结构、交易生命周期以及安全原则等细节的
▷ 比特币和区块链的发明的衍生物,包括替代链、货币以及应用程序
▷ 通过用户故事、简练的类比、示例以及代码段来阐释的关键技术概念
Andreas M. Antonopoulos 是比特币行业最为知名和受人尊敬的技术专家、连续创业家,现担任多家技术创业公司的顾问。他同时还是一名出色的演说家,教师以及作家,经常在世界各地的会 议和团体活动中发表演说,用通俗易懂的讲解把复杂的学科普及给广泛听众。

“论及比特币,有人问我它到底是怎样工作的?现在我有了一个极好的答案——《精通比特币》这本书会让每位读者深刻理解比特币的工作原理,还会帮助读者为写出下一代神奇加密货币的应用程序做好充分准备。”
——Gavin Andresen,比特币基金会,首席科学家
“Andreas的书将帮助你投身于金融世界的软件革命。”
——Naval Ravikant,AngelList联合创始人

捐赠

在本书翻译过程中,巴比特 捐赠了1个比特币,火币OKCoin云币 各捐赠了2个比特币。
捐赠地址为: 18AN9XojYq5EU5x8p6pgdYk3RKo6zu9xzy;这些比特币当前并没有发放给参与翻译的义工。计划大体如下:

  1. 比特币地址继续接受捐赠:18AN9XojYq5EU5x8p6pgdYk3RKo6zu9xzy
  2. 捐赠的比特币将主要用于本书翻译的纠错与修订(具体奖励措施尚未确定);如果您发现了书中的错误,请点击此处填写《勘误收集表》。
  3. 一年之后(即,2016 年 6 月 1 日),剩余的比特币将平均发放给译者们,留作纪念。
  4. 捐赠名单讲在此页面公布。如果您愿意,捐赠比特币时,请使用 blockchain.info 或者 bitfoo.com,在 note 中标明您的身份,以作纪念。

==目录==

简介
前言
第1章 介绍
第2章 比特币的原理
第3章 比特币客户端
第4章 密钥、地址、钱包
第4章 高级密钥和地址
第5章 交易
第6章 比特币网络
第7章 区块链
第8章 挖矿与共识
第8章 区块链分叉、矿池、共识攻击
第9章 竞争币、竞争块链和应用程序
第10章 比特币安全
附录1 交易脚本的操作符、常量和符号
附录2 比特币改进协议
附录3 pycoin库、ku程序和tx交易程序
附录4 sx工具下一些的命令
本文原链接:http://zhibimo.com/explore/Mastering-Bitcoin

比特币是穷人的信托

比特币是穷人的信托
很多人不明白这个道理
说几个事实:
1, 比特币是全世界穷人的信托,只需要你相信它,学会保管它,你就可以参与进来,没有任何门槛
2, 比特币可以在全世界有互联网的地方自由流通,不用经过银行,银行就是gov来控制你经济的地方
3, 大部分穷人都没有投资渠道,就算有大部分渠道也是割韭菜的,比如癌股,或者是有门槛的,但是比特币没有,它是自由的,亲民的
比特币就是全世界穷人的信托
由于马太效应,钱生钱不要太容易,现在的金融和经济系统纯粹就是为大银行家,大资本,大财团服务的
滥发的钞票,还有通胀多出来的钱其实都进了大资本家的怀里
穷人和中产一点机会都没有,但是比特币让你的资产不会贬值
比特币的铸币税属于每一个持币人

比特币常见误区

1)一些人把比特币当成了表面印着电路板,上面有一个大写B的金属币。那个金属币其实只是一个玩具道具。
真正的东西甚至不能叫虚拟货币,因为没有币,只有账本上的一串数字。
2)大家介绍比特币都说数量有限,最多只有两千一百万个。这是有心的误导。
就像人民币的常用单位是元,但基本能用单位确是分,用硬币。支付宝,微信都可以花0.01元,也就是1分。但0.1分就不行了。
比特币的基本单位是1亿分之一个币,叫聪。因为在理论上,和早期区块不拥堵时,无手续费也能转账1聪。
比特币的真实有用单位是两千一百万亿个。今后不会不够用。今后老百姓接触的也会是多少聪,而不是多少个。
论个的比特币是个很大的单位,就像亿美元,吨黄金,老百姓的黄金都论多少克。
3)比特币诞生以来上涨了1100多万倍,单价高达9700美金,人民币6.4万,绝对是泡沫。这样说,不是有心无心误导,就是没认真研究过而人云亦云。
一个聪很便宜,只有0.064分钱。
比特币不停的上涨,是价值发现和合理回归的过程,国际国内资深人士说每个币会到1百万美金,绝不是毫无根据的信口开河的忽悠。
这是一种很可能实现的的前景。当然道路绝不会一帆风顺,前方充满了艰难险阻,万里长征才刚开始,甚至有失败的可能。
4)比特币本身也绝不是币而已,它是一个基于互联网,或叫寄生于互联网的一个网络系统。他的基因是区块链。
它是一个价值网络,也是一个信息网络。早期一些无关信息,包括创始块上中本聪的一句话。都永久的存在于区块链上了。
5)比特币链,是一个公链,是第一个区块链,也是最强壮安全的区块链。比特币是这个链维持下去的不可或缺的奖励机制和润滑剂。

永恒的告白-比特币区块448064

比特币区块448064只有一个交易(加上挖矿奖励的话算两个),交易地址巧妙的组成了一封给Ms. Dover的告白。
更有趣的是交易金额都是圆周率的前几位,同样象征着无限不循环小数-爱的永恒(都是0.00314159BTC)
观察交易记录,发现这笔转账至多在两天内就得到了确认(手续费仅0.004 sat/B确保了不会被其他利益驱动的矿工挖走)
意味着这个告白者应该有很多算力以支持。

本文作者译文:
致 Dayah Dover,
你的个性独一无二,
你的智慧闪耀光芒,
你能做少数人才能做的事。
你这么的美丽动人,
你是我的整个世界,
给了我生命的意义和乐趣。
Dayah
我爱你
永远
只要有网络,只要社会还在运转,只要比特币不死,那么这封告白就会被永远留在区块记录上。
这大概就是技术宅的浪漫吧。
区块查询
https://blockchain.info/block/00 … f9f5ecbd57261cad454
本文作者的补充
https://blockpath.com/pages/Inte … ternal_love_letter/
—-
如果想的话,你也可以做到!只需要一笔交易即可。
像这样写在区块里的,可算是大手笔了!

比特币披萨的故事

比特币披萨日(Bitcoin Pizza Day):2010年5月22日
 
在比特币发展的初期,一个程序员极客花了一万枚比特币购买了两个披萨并放到了论坛上炫耀。 
比特币区块链上的可追踪溯源性帮助我们来验证这笔交易,即使是七年以前的一笔交易也能在准确今天查到历史。 我在比特币区块高度57043上找到了这么一个转账记录,在2010年5月22日确实有一笔10000BTC的转账,与披萨日的日期相符,看来确信无疑了。 

附上比特币区块链浏览器的查询链接:https://blockchain.info/tx/a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d
 

2010年的5月18号,我们的主人公Laszlo Hanyecz在比特币论坛BitcoinTalk上发帖声称:“我可以付一万比特币来购买几个披萨,大概两个大的就够了,这样我可以吃一个然后留一个明天吃。 你可以自己做披萨也可以在外面订外卖然后送到我的住址。” 他甚至对自己的口味偏好做了要求:“我喜欢洋葱,胡椒,香肠,蘑菇等,不需要奇怪的鱼肉披萨。”
 
帖子发出之后,有几个感兴趣的论坛朋友确实陆续有一些回复,除了有人问地址之外,还有人表示自己在欧洲不知道如何帮Laszlo Hanyecz订美国的外卖。Laszlo附上了自己在佛罗里达州的地址,并且还有人提示按当时价格10000BTC可以换到41美金,两个披萨可能不划算。 
在5月22号Laszlo发出了交易成功的炫耀贴,表示已经和一个叫Jercos的哥们完成了交易,还附上了披萨的图片。至此,这个不超过20人回复的帖子沉寂了。
 
2010年的8月份,随着比特币正式交易所的上线,有好事的就把这个帖子挖了出来。表示600美元的披萨好吃吗(2010年8月价格),11月的时候还有哥们发出2600美元的披萨好吃吗的跟帖(2010年11月价格)。Laszlo 做出了回应,玩笑似的表示自己现在已经不能够一天挖几千枚币了,所以可能再也吃不起这种披萨。
 
1. Laszlo如何拥有那么大量的比特币?
首先,他是一个精通计算机的程序员,并且很早就进入了这个领域,在比特币系统算力不高的早期时代,他就开始挖矿了。 
第二,你可能并不知道,他是使用GPU挖矿的第一人。在他之前的大部分挖矿都是使用CPU的,他觉得CPU挖矿不过瘾,然后发现GPU要比CPU挖矿快800倍,于是就在比特币还不普及的阶段用GPU挖了大量的比特币。根据他之前的回帖,每一天的收益在几千枚左右,这也不奇怪为什么拿出1w枚来换取披萨了。当然,如今GPU的算力已经不够了,大部分的比特币矿机都采用定制的ASIC芯片。
 
2. Laszlo后来去哪里了,还持有很多比特币嘛?
根据Laszlo在论坛上最后的发言(2014)年,他再次之后还持续挖过一段时间的矿,但并没有长期的保存它,而是在不同时期卖掉了。(总计卖掉了8w多枚比特币),如今他的比特币账户趋近余零。
 
3. 买了披萨的人现在在哪里?
Jercos非常的年轻,现在也只有25岁(买10000个比特币那年仅仅19岁)。他告诉记者说自己在bitcoin刚创世的2009年就关注了这项技术,并成为了出入各大极客论坛的一员。他与卖披萨的Laszlo并不认识,但是总是在同一个IRC(聊天室)出入,在当时算是对ID比较相熟。
 

谈到一万个比特币的去向时,他表示在第二年他把这一万枚比特币以400美金的价格出售了,回报率在十倍。(虽然十倍但是还是很可惜了。。)如今他对区块链的技术还是十分看好,对以太坊也十分看好。
 
什么大风大浪没见过,这句话形容早期的区块链投资者应该更加合适不过了。用一万个比特币买披萨这件事情,世界上仅发生过这一次,以后可能也很难发生了。
 
一项革命性新技术的诞生往往开始是对学术界的冲击开始,进而影响经济金融,再然后改变社会格局和相关政策。这是技术革命的标准流程,从蒸汽机到电力再到互联网,人们总是会为不可逆转的革命性新技术进行知识迭代,为其制定专门的规范政策。
 
新的技术浪潮趋势已经来到,无论是人工智能还是区块链,有的人不停地在不明朗的黑暗中不断探索,买卖一万比特币也只是他们人生中的插曲。有的人还在原地观看,别人跌倒了,笑笑。别人成功了,也笑笑。

比特币/以太坊国际钱包创建登录收发查询操作流程

一、国际钱包创建
百度搜索,下载谷歌或火狐浏览器(有些浏览器系统不接受)
1)点击链接或在浏览器地址栏输入:https://blockchain.info/wallet/#/ 进入国际钱包注册页面(图1英文)

2)点击图1中的SIGN UP(注册),进入创建钱包页面(图2:中文)

3)在图2,输入电子邮箱、设置和确认钱包密码,勾选“同意服务条款”,点击“继续”进入钱包欢迎页面(图3)

4)点击图3中“开始”,进入“钱包主页”(图4)

5)比特币:点击图4中,“开始”,生成钱包的第一个比特币地址:1Jkie7pHb4PNtSeopViMhQ51758SegtbTx(图5)
点击“复制”,然后黏贴,保存好你的比特币收币地址。

 
6)以太币:点击图5中Currency(货币)选择按钮(@ Bitcoin右边黑色向下三角图标),生成钱包的第一个以太币地址:0x832784667bE9Eb5B69419435BE6A7141acB3b4B6(图6)。点击“复制”,然后黏贴,保存好你的以太币收币地址

 
二、邮箱验证
1)登录钱包注册邮箱,查收系统要求确认你邮箱的邮件(图7)。务请保存好此邮件!

2)点击图7中 “是的,这是我的电子邮件”(验证邮件),稍候,即出现验证成功页面(图8)

三、登录钱包
1)登录邮箱,打开系统邮件(图7),点击你的钱包识别码(钱包账号)6278768a-c8d5-4224-82b9-702252ef46be进入钱包登录页面(图9)
建议复制并保存好你的钱包登录链接:https://blockchain.info/wallet/#/login/6278768a-c8d5-4224-82b9-702252ef46be  这样每次登陆就不用打开邮箱了。

2)在图9中输入你的钱包密码,点击“登录”,即进入钱包公告支持以太币页面(图10)

3)点击“开始”,即进入钱包主页(图11),就可以收发比特币或以太币了。

说明
1)你的邮箱确认后,在你自己的电脑或手机, 可正常登录钱包。
2)如你在别的电脑或手机登录钱包,或在你自己的电脑或手机用别的浏览器登录,系统会发授权登录邮件到你邮箱(图12)。确认后,才可登录钱包

3)查收系统发来的“申请登录授权”邮件(图13)

4)点击“授权登陆”链接,出现“确认授权”页面( 图14)

5)点击“接受”,出现“登录批准”页面(图15)。稍后,你刚才登录钱包的页面自动进入钱包主页(图4)

备注:国际钱包创建和操作都非常简单;“安全中心”可暂缓设置;无法直接购买比特币、以太币,是其最大缺憾。
四、比特币查询
1)点击链接,或在浏览器地址栏输入:https://blockchain.info 进入国际钱包主页(图16:英文)

2)在图16中的搜索栏Search中,复制黏贴收款者的比特币地址,点击深蓝色的Search按钮(图16),出现查询结果页面(图17)
3)图17显示该比特币地址迄今所发生的全部交易记录(往下拉,出现每笔交易明细)说明:至少有6个 区块链播报CONFIRMATION,该笔交易才确认成交
五、以太币查询
1)点击链接,或在浏览器地址栏输入:https://etherscan.io/  进入网站主页(图18:英文)

2)在图18中的搜索栏(右上角),复制黏贴收款者的以太币地址,点击深蓝色的GO按钮(图18),出现查询结果页面(图19)

图19显示该以太币地址迄今无交易记录
 

旧马计算

2017年6月22日,直推伙伴静静提供帮助0.1个比特币(图1)
2017年10月15日,三妹宣布第五次重启,静静账户总旧马10106元(图2)
为了避免比特币剧烈波动的风险,当初与静静约定:
1)最后按人民币给她计算本息和注册奖金;
2)我和她合买了0.1个比特币,她出资1142元,差额我出。
3)我承担比特币波动风险
静静旧马计算
1、摘要
初始本金:1142元
参与时间:2017年6月22日(利息从次日算起)
重启时间:2017年10月15日(利息算至前一天)

2、利息结算(每30天计算复利;整个周期不包括首尾日):

1)6月22日至7月22日:1142*1%*30天=342.6元;本息=1142+342.6=1484.6元
2)7月23日至8月21日:1484.6*1%*30天=445.38元;本息=1484.6+445.38=1929.98元
3)8月22日至9月20日:1929.98*1%*30天=578.994元;本息=1929.98+578.994=2508.974元
4)9月21日至10月15日:2508.974*1%*24天=602.15376元;本息=2508.974+602.15376=3111.12776元
3、注册奖金(2017年10月15日:1美元=6.5785元)
20美元*6.5785=131.57元
4、旧马总计
3111.12776元+131.57元=3242.70元
5、旧马平均日收益率(含注册奖金)
(3242.70-1142)/1142/116天(含首尾日)=1.5858%/日
静静账户里,我的旧马情况说明
1)10106元-3242.70元=6863.3元
2)我当初投入的资金远小于静静的(具体记不清了,只是帮她买0.1个比特币,我凑了点钱),但旧马远多于她的,得益于比特币翻几倍的增长。
当初我根本不知比特币会如此疯狂的增长!现在看来,提供帮助还是应该优先考虑用比特币,在享受每日1%收益的同时,还可以坐享比特币的自然增值。
MMM+比特币,的确势不可挡!
参与MMM有风险!请闲钱参与,或干脆不参与!
原创者:李庐年
2017年10月18日