欧链网 - 聚焦全球区块链行业资讯

网站地图最新

欧链网 - 聚焦全球区块链行业资讯

当前位置: 欧链网 > 学院 >

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

时间:2021-09-09 16:23人气:来源: www.xuanxuanjuhui.com

2.1 买卖、区块、挖矿和区块链

与传统银行和支付系统不同,BTC系统是以去中心化信赖为基础的。不同于中央信赖权威系统,在BTC中,信赖是由BTC系统中不同参与者之间交互来达成的一种自然属性。在本章中,大家将从一个较高层面检视BTC,通过追踪一笔BTC系统中的单独买卖,来看看它在BTC分布式共识机制中变得“被信赖”和被同意的情形,与最后成功地被存储到区块链。

书中每个例子都是BTC互联网中发生的真实买卖,通过将资金从一钱包发送到另一钱包来模拟用户间的交互。大家在追踪一笔通过BTC互联网和区块链的买卖时,将用到一些区块链数据库查看网站使每一个步骤可以便捷在网页上直接被呈现。提供区块链数据查看的网站就像是一个BTC的搜索引擎,你可以搜索BTC的地址、买卖和区块,与可以看他们之间的关系和资金流动。

容易见到的区块链数据查看网站包括:

▷ Blockchain info
▷ 比特币 Block Explorer
▷ insight
▷ blockr Block Reader

以上每个查看网站都有搜索功能,可以通过地址,买卖哈希值或区块号,搜索到在BTC互联网和区块链中对应的等价数据。大家将给每一个例子提供一个链接,可以直接带你到有关条目,便捷你做详细研究。


图2-1 BTC概述

如图2-1所示的概述图中,大家可以看到BTC系统由用户、买卖和矿工组成。在本章中,大家将通过追踪在互联网上传输的一笔买卖,从整个BTC系统的的视角检视各个部分之间的交互。后续章节将详细讲解钱包、挖矿、企业系统背后的技术细则。

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


图2-2

总价:
$1.50 美元
0.0150 比特币

这个微信二维码中的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"


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

Bob说到,“总共1.50USD,或15毫BTC”

Alice用她的智能手机扫描了显示的条形码。她的智能手机显示一笔给Bob咖啡的0.0150BTC的支付请求,然后她按下发送键授权了这笔支付。在几秒钟时间内Bob将会在收银台看到这笔买卖,并完成买卖。

在下面的章节中,大家将更详细地检视这笔买卖,察看Alice的钱包是如何构建买卖,买卖又是如何在互联网中广播、如何被验证,与Bob在后续买卖中如何消费那笔钱。


从千分之一BTC(一毫BTC)到一百万分之一BTC,BTC互联网可以处置任意小额买卖。在本书中,大家将用“BTC”这个术语来表示任意数目的BTC货币,从最小单元到可被挖出的所有BTC总数。

容易来讲,买卖告知全网:BTC的持有者已授权把BTC转帐给别的人。而新持有者可以第三授权,转移给该BTC所有权链中的别的人,产生另一笔买卖来花掉这部分BTC,后面的持有者在花费BTC也是用类似的方法。

买卖就像复式记账法账簿中的行。容易来讲,每一笔买卖包含一个或多个“输入”,输入是针对一个BTC账号的负债。这笔买卖的另一面,有一个或多个“输出”,被当成信用点数记入到BTC竞价推广账户中。这部分输入和输出的总额无需相等。相反,当输出累加略少于输入量时,两者的差额就代表了一笔隐含的“矿工费”,这也是将买卖放进账簿的矿工所采集到的一笔小额支付。如图2-3描述的是一笔作为记账簿记录的BTC买卖。


图2-3

买卖也包含了每一笔被转移的BTC的所有权证明,它以所有者的数字签名形式存在,并可以被其他人独立验证。在BTC术语中,“消费”指的是签署一笔买卖:转移一笔以前买卖的BTC给以BTC地址所标识的新所有者。


买卖是将钱从买卖输入移至输出。输入是指钱币的出处,一般是之前一笔买卖的输出。买卖的输出则是通过关联一个密钥的方法将钱赋予一个新的所有者。目的密钥被叫做是安全锁。如此就给资金强加了一个需要:有签名才能在将来的买卖中赎回资金。一笔买卖的输出可以被当做另一笔新买卖的输入,如此伴随钱从一个地址被移动到另一个地址的同时形成了一条所有权链。


图2-4

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

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


图2-5

另一种容易见到的买卖形式是集合多个输入到一个输出的模式。这等于现实日常将不少硬币和纸币零钱兑换为一个大额面钞。像如此的买卖有时由钱包应用产生来清理很多在支付过程收到的小数额的找零。


图2-6

最后,另一种在BTC账簿中容易见到的买卖形式是将一个输入分配给多个输出,即多个接收者的买卖。这种买卖有时被商业实体用作分配资金,比如给多个雇员发工资的情形。


图2-7

Alice的钱包应用知晓怎么样选取适合的输入和输出以打造Alice所期望的买卖。Alice仅需指定目的地址和金额,其余的细则钱包应用会在后台自动完成。非常重要的一点是,钱包应用甚至可以在完全离线时打造买卖。就像在家写张支票,之后放到信封发给银行一样,BTC买卖打造和签名时不需要连接BTC互联网。只有在实行买卖时才需要将买卖发送到互联网。

Alice的钱包应用第一要找到一些足够支付给Bob所需金额的输入。大部分钱包应用维护着一个含有用钱包自己密钥锁定的“未消费买卖输出”小型数据库。因此Alice的钱包会包含她用现金从Joe那里购买的BTC的买卖输出副本。完整推广客户端含有整个区块链中所有买卖的所有未消费输出副本。这使得钱包即能拿这部分输出构建买卖,又能在收到新买卖时非常快地验证其输入是不是正确。然而,完整推广客户端占太大的硬盘空间,所以大部分钱包用轻量级的推广客户端,只保存用户我们的未消费输出。

假如钱包推广客户端没某一未消费买卖输出,它可以通过不一样的服务者提供的各种API或完整索引节点的JSON PRC API从BTC互联网中拿到这一买卖信息。例子2-1展示了用HTTP GET命令对一个特定URL打造了一个RESTful API的请求。这个URL会返回一个地址的所有未消费买卖输出,以提供给需要这部分信息的任何应用作为打造新买卖的输入而进行消费。大家用一个容易的HTTP命令行推广客户端 cURL来获得这个响应数据。

例2-1 查找Alice的BTC地址所有些未消费的输出

$ 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那里转过来的未消费输入就包含在这个买卖里面,它的价值是一千万聪,即 0.10BTC。通过这个信息,Alice的钱包应用就可以创建新的买卖将钱转账到新地址。


点击查询Joe和Alice间的买卖信息

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

买卖的输出会被创建成为一个包含这笔数额的脚本的形式,只能被引入这个脚本的一个解答后才能兑换。容易点说就是,Alice的买卖输出会包含一个脚本,这个脚本说 “这个输出哪个能拿出一个签名和Bob的公开地址匹配上,就支付给哪个”。由于只有Bob的钱包的私钥可以匹配这个地址,所以只有Bob的钱包可以提供这个签名以兑换这笔输出。因此Alice会用需要Bob的签名来包装一个输出。

这个买卖还会包含第二个输出。由于Alice的金额是0.10BTC的输出形式,对0.015 BTC一杯的咖啡来讲太多了,需要找Alice 0.085BTC的零钱。Alice钱包创建给她的零钱的支付就在付给Bob的同一个买卖里面。可以说,Alice的钱包将她的金额分成了两个支付:一个给Bob,一个给自己。她可以在将来的买卖里消费这笔零钱输出。

最后,为了让这笔买卖尽快地被互联网处置,Alice的钱包会多付一小笔成本。这个不是明显地包含在买卖中的;而是通过输入和输出的差值所隐含的。假如Alice创建找零时只找 0.0845BTC,而不是 0.085BTC的话,这里就有剩下 0.0005BTC 。由于加起来小到 0.10,所以这个 0.10 BTC的输入就没被完整的消费了。这个差值会就被矿工当作买卖费放到区块的买卖里,最后放进区块链帐薄中。

这个买卖的结果信息可以用区块链数据查看站点看到,如图2-8所示。


图2-8


点击查询Alice支付Bob咖啡的买卖的信息

这个被Alice钱包应用创建的买卖大小为258字节,包含了金额将来所属需要的全部信息。目前,这个买卖需要要被传送到BTC互联网中以成为分布式账簿的一部分。在下一节里,大家来看下一个买卖怎么样成为新区块的一部分,与区块是怎么样被挖矿构建的。最后,大家会看看新区块被加进区块链后,是怎么样随更多区块的添加而增加可信度的。

由于这个买卖包含处置所需的所有信息,所以这个买卖是被怎么样或从哪儿传送到BTC互联网的就无所谓了。BTC互联网是由参与的BTC推广客户端联接几个其他BTC推广客户端组成的点对点互联网。BTC互联网的目的是将买卖和区块传播给所有参与者。

Alice的钱包应用可以发送新的买卖给其它任意一个已联接到网络的BTC推广客户端,不论其是由有线网、WiFi、还是通过手机联接的。她的钱包不必直接连着Bob的BTC钱包,且她不必用咖啡馆提供的互联网联网,虽然这两者都是可能的。任何BTC互联网节点收到一个之前没见过的有效买卖时会立刻将它转发给联接到自己的其它节点。因此,这个买卖飞速地从点对点互联网中传播开来,几秒内就能到达大部分节点。

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


一个对BTC买卖的容易见到误解是它们需要要等10分钟后被确认加进一个新区块,或等60分钟以得到六次确认后才是有效的。虽然这部分确认同以确保买卖已被整个互联网同意,但对于像一杯咖啡如此的小额产品来讲就没必要等待那样长期了。一个企业可以免确认来同意BTC小额支付。如此做的风险不比同意一个不是用有效身份证领取或没签名的信用卡的风险更大,而后者是目前企业常做的事情。

这个买卖目前在BTC互联网上传播开来。但只有被一个称为挖矿的过程验证且加到一个区块中之后,这个买卖才会成为这个共享账簿的一部分。关于挖矿的详细描述请见第8章。

BTC系统的信赖是打造在计算的基础上的。买卖被包在一块放进区块中时需要很大的计算量来证明,但仅需少量计算就能验证它们已被证明。挖矿在BTC系统中起着两个用途:

▷ 挖矿在构建区块时会创造新的BTC,和一个中央银行印发新的纸币非常类似。每一个区块创造的BTC数目是固定的,随时间会日渐降低。

▷ 挖矿创建信赖。挖矿确保只有在包含买卖的区块上贡献了足够的计算量后,这部分买卖才被确认。区块越多,花费的计算量越大,意味着更多的信赖。

描述挖矿的一个好办法是将之类比为一个巨大的多人数独谜题游戏。一旦有人发现正解之后,这个数独游戏会自动调整困困难程度以使游戏每次需要大约10分钟解决。想象一个有几千行几千列的巨大数独游戏。假如给你一个已经完成的数独,你可以非常快地验证它。然而,假如这个数独只有几个方格里有数字其余方格都为空的话,就会花费很长的时间来解决。这个数独游戏的困困难程度可以通过改变其大小来调整,但即便它很大时验证它也是相当容易的。而BTC中的 "谜题" 是基于哈希加密算法的,其展示了一样的特质:非对称地,它解起来困难而验证比较容易,并且它的困困难程度可以调整。

在 “1.3 BTC的应用、用户和他们的故事”一节中,大家提到了一个叫Jing的在上海学计算机工程的学生。Jing在BTC互联网中饰演了一个矿工的角色。大概每10分钟,Jing和其他上千个矿工一块展开一场对一个区块的买卖探寻正解的全球竞赛。为探寻这个解,也被叫做工作量证明,整个互联网需要具备每秒亿万次哈希计算的能力。这个工作量证明算法指的用SHA256加密算法不断地对区块头和一个随机数字进行哈希计算,直到出现一个和预设值相匹配的解。第一个找到这个解的矿工会取得这局竞赛并会将此区块发布到区块链中。

Jing从2010年开始挖矿,当时他用一个飞快的桌面电脑来为新区块探寻正解。伴随更多的矿工加入BTC互联网中,探寻谜题正解的困困难程度飞速增大。不久,Jng和其他矿工升级成更专业的硬件,譬如游戏桌面电脑或控制台专用的高档独享图像处置单元芯片。在写这本书的时候,解题已经变得极其困难,只有用集成了几百个挖矿专用算法硬件并能同时在一个单独芯片上并行工作的专用集成电路挖矿才会营利。Jing同时加入了一个类似彩票奖池的、可以让多个矿工共享计算力和报酬的矿池。Jing目前运行两个通过USB联接的ASIC机器天天24小时不间断地挖矿。他卖掉一些挖矿所得到的BTC来支付电费,并可以通过营利获得一些收入。作为专用挖矿软件的后台,他的计算机里安装了一个BTC索引推广客户端,名字为bitcoind。

互联网中产生的一笔买卖直到成为整个BTC大账簿——区块链的一部分时才会被确认有效。平均每10分钟,矿工会将自上一个区块以来发生的所有买卖生成一个新的区块。新买卖不断地从用户钱包和应用流入BTC互联网。当BTC互联网上的节点看到这部分买卖时,会先将它们放到各自节点维护的一个临时的未经验证的买卖池中。当矿工构建一个新区块时,会将这部分买卖从这个买卖池中拿出来放到这个新区块中,然后通过尝试解决一个很不简单的问题以证明这个新区块的合法性。挖矿过程的细则会在“8.1 简介”一节中详加描述。

这部分买卖被加进新区块时,以买卖成本高的优先与其它的一些规则进行排序。矿工一旦从互联网上收到一个新区块时,会意识到在这个区块上的解题竞赛已经输掉了,会立刻开始下一个新区块的挖掘工作。它会立刻将一些买卖和这个新区块的数字指纹放在一块开始构建下一个新区块,并开始给它计算工作量证明。每一个矿工会在他的区块中包含一个特殊的买卖,将新生成的BTC作为报酬支付到他一个人的BTC地址。假如他找到了使得新区块有效的解法,他就会得到这笔报酬,由于这个新区块被加入到了总区块链中,他添加的这笔报酬买卖也会变成可消费的。参与矿池的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号区块,即创世区块。伴随时间变长,这个区块链的高度也随之增长,每一个区块和整个链的计算复杂度也随之增加。包含Alice的买卖的区块后面形成的新区块使得信赖度进一步增加,由于他们叠加了更多的计算在这个愈加长的链子上。按惯例来讲,一个区块获得六次以上“证明”时就被觉得是不可撤销的了,由于要撤销和重建六个区块需要巨量的计算。在第8章大家会详细描述挖矿和信赖打造的过程。

既然Alice的这笔买卖已经成为区块的一部分被嵌入到了区块链中,它就成为了整个分布式BTC账簿的一部分并对所有BTC推广客户端应用可见。每一个BTC推广客户端都能独立地验证这笔买卖是有效且可消费的。全索引推广客户端可以追钱款的出处,从首次有BTC在区块里生成的那一刻开始,按买卖与买卖间的关系顺藤摸瓜,直到Bob的买卖地址。轻量级推广客户端通过确认一个买卖在区块链中且在它后面有几个新区块来确认一个支付的合法性。这种方法叫做浅易支付验证节点”)。

Bob目前可以将此买卖和其它买卖的结果信息作为输入,创建新的所有权为别的人的买卖。如此就达成了对此买卖的消费。举例,Bob可以用Alice支付咖啡的BTC转账给承包商或提供商以支付相应成本。大部分状况下,Bob用的BTC商户端会将多个小额支付聚合成一个大的支付,或许会将一整天的BTC收入聚合成一个买卖。如此会将多个支付合成到咖啡馆财务竞价推广账户的一个单独地址。图2-6为买卖集合示例。

当Bob花费从Alice和其他客户那里赚得的BTC时,他就扩展了BTC的买卖链条。而这个链条会被加到整个区块链账簿,使所有人知道并信赖。大家假定Bob向在邦加罗尔的网站建设师Gopesh支付一个新网页的设计成本。那样区块买卖链会如图2-10所示。


图2-10

==目录==

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

上一篇:比特币矿池排行榜

网站首页

下一篇:没有了