主页 > imtoken苹果版 > 数字货币开发专题(精通使用区块链技术的比特币原理)

数字货币开发专题(精通使用区块链技术的比特币原理)

imtoken苹果版 2023-11-23 05:10:39

与传统的银行和支付系统不同,区块链系统基于去中心化信任。与中央信任权威体系不同,在区块链中,信任是区块链系统中不同参与者之间通过互动而获得的自然属性。在本章中,我们将从高层次审视区块链,通过追踪区块链系统中的单个交易,看看它是如何变得“可信”并在区块链的分布式共识机制中被接受,并最终成功存储在区块链上(一个分布式包含在区块链系统中发生的所有交易的公共分类帐。

书中的每个示例都是发生在区块链网络中的真实交易,通过从一个钱包向另一个钱包发送资金来模拟用户(Joe、Alice 和 Bob)之间的交互。当我们通过区块链网络和区块链跟踪一笔交易时,我们会使用一些区块链数据库查询网站,这样每一步都可以方便地直接呈现在网页上。提供区块链数据查询的网站就像一个区块链搜索引擎。您可以搜索区块链的地址、交易和区块,以及查看它们之间的关系和资金流向。

常见的区块链数据查询网站包括:

上述每个查询网站都有搜索功能,可以通过地址、交易哈希值或区块号搜索区块链网络和区块链中的等价数据。我们将提供每个示例的链接,将您直接带到相关条目,供您详细研究。

2.1.1 区块链概述

图 2-1 区块链概览

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

2.1.2 买咖啡

在上一章中,Alice 是一个刚刚获得她的第一个区块链的新用户。在“1.4.2 获得你的第一个区块链”部分中,Alice 在遇到她的朋友 Joe 时用现金换取了区块链。 Joe 生成的这笔交易给 Alice 的钱包一个 0.10 区块链。现在 Alice 将首次使用区块链在加利福尼亚州帕洛阿尔托的 Bob's Coffee Shop 购买一杯咖啡。 Bob 的咖啡店在他的销售点系统中添加了区块链支付选项。价目表以当地货币 (USD) 列出,但在结账时,客户可以选择以美元或区块链支付。此时,Alice 点了一杯咖啡,然后 Bob 将交易输入到收银机中,之后销售系统会根据当前市场汇率将美元总价格转换到区块链上,然后以两种货币同时显示,并显示包含此交易支付请求的二维码(如图2-2所示):

不同于仅包含目标区块链地址的二维码,当前的支付请求是一个二维码编码的 URL,其中包含目标地址、支付金额,以及像“Bob Coffee”这样的交易描述。这允许区块链钱包应用程序在发送支付请求时预先填写特定的支付信息,向用户显示友好且易于理解的描述。你可以用区块链钱包应用扫描这个二维码,看看爱丽丝可能会看到什么信息。

Bob 说:“总共 1.50 美元,即 15 毫块”

Alice 用她的智能手机扫描显示的条形码。她的智能手机向 Bob Coffee 的 0.0150 区块链显示付款请求,她按下发送按钮授权付款。几秒钟后(大约与信用卡授权相同的时间),Bob 将在收银台看到交易并完成交易。

在接下来的章节中,我们将更详细地研究这笔交易,观察 Alice 的钱包如何构建交易、交易如何在网络上广播、如何验证以及 Bob 如何在后续交易中花费这笔钱。

比特币区块链技术_比特币区块链概念股_什么是比特币区块链视频

区块链网络可以处理任意小的交易,范围​​从区块链的千分之一(一个毫区块链)到百万分之一的区块链(称为 satoshi 区块链)。在本书中,我们将使用术语“区块链”来指代任意数量的区块链货币,从最小单位(1 satoshi)到所有可开采区块链的总数(21,000,000).

2.2 个区块链交易

简单来说,交易通知全网区块链持有者已授权将区块链转让给他人。新的持有者可以再次授权,将其转让给区块链所有权链中的其他人,并产生另一笔交易来花费这些区块链,后续持有者以类似的方式花费区块链。

交易就像复式簿中的行。简而言之,每笔交易都包含一个或多个“输入”,即对区块链账户的负债。在交易的另一端,有一个或多个“输出”作为信用记入区块链账户。这些投入和产出(负债和信贷)的总和不必相等。相反,当输出累积略低于输入时,差额代表隐含的“矿工费”,这是将交易记入账本的矿工收取的一小笔款项。图 2-3 描绘了记录为账本的区块链交易。

图2-3

交易还包含每个被转移区块链(输入)的所有权证明,它以所有者的数字签名的形式存在,并且可以由任何人独立验证。在区块链术语中,“消费”是指签署交易:将先前交易的区块链转移给由区块链地址标识的新所有者。

交易是资金从交易输入到输出的移动。输入指代币的来源,通常是先前交易的输出。交易的输出是通过关联一个密钥给新的所有者钱。目标键称为 Encumbrance。这对资金提出了要求:在未来的交易中赎回资金需要签名。一笔交易的输出可以作为另一笔新交易的输入,从而在资金从一个地址转移到另一个地址时形成所有权链(图 2-4)。

图2-4

Alice 使用之前的交易作为输入向 Bob 支付咖啡费用。在前面的章节中,爱丽丝用现金换取了她朋友乔的一点区块链。该交易有一些区块链被 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或全inode的JSONPRC API从区块链网络获取此交易信息。示例 2-1 显示了一个 HTTP GET 命令,该命令向特定 URL 发出 RESTful API 请求。此 URL 将返回地址的所有未使用交易输出,以供任何需要此信息作为输入以建立新交易的应用程序使用。我们使用一个简单的 HTTP 命令行客户端 cURL 来获取这个响应数据。

示例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 转移的未使用输入包含在此交易中,其价值为 1000 万聪,即 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 的钱包会支付少量的额外费用。这未明确包含在交易中;它是由输入和输出之间的差异所暗示的。如果 Alice 在创建变更时只找到 0.0845 区块链而不是 0.085 区块链,那么将会有剩余的 0.0005 区块链(500,000 satoshis)。因为总和只有 0.10,所以这个 0.10 区块链的输入没有被完全消耗掉。这笔差额会被矿工作为交易手续费存入区块交易,最后存入区块链账本。

本次交易的结果信息可以在区块链数据查询站点看到,如图2-8所示。

图2-8

点击查看 Alice 为 Bob 的咖啡付款的信息

2.3.3 将交易放入总账

Alice Wallet 应用程序创建的交易大小为 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在区块链网络中扮演矿工的角色。大约每 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 区块,所以在这个区块中增加了更多的计算,从而增强了这些交易的可信度。包含爱丽丝交易的区块算作该交易的“证明”。每次基于此块生成新块时,都会在交易中添加一个“证明”。随着区块的堆积,交易变得难以推翻,因此它在网络中获得了更多的信任。

图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 是一个事务集的例子。