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 查找回来的呼应数据

https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg  "unspent_outputs": [    https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg      "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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注