2018 年 8 月

第 33 卷,第 8 期

区块链 - 区块链基础知识:深入了解交易哈希链

通过Jonathan Waldman |2018 年 8 月

在本系列中第一篇文章中 (msdn.com/magazine/mt845650),提供广泛了解现代区块链所需的基础概念使用高级示例来说明基础知识。在本文中,我会再次一些来自前一篇文章的主题就是执行有关事务哈希链、 事务池的角色以及如何最长的区块链占据优先级的更多详细信息。这篇文章最好读取作为前一篇文章的补充,并包含面向开发人员熟悉区块链技术的介绍性材料。

顺便说一下,在此系列文章基于比特币区块链,而我不提倡采用特定的区块链产品或技术。相反,我的目标是了解基础上的受欢迎的区块链技术的开发,并且要为你提供知识可以应用所应决定利用现有的区块链或设计您自己。研究区块链,您就会很快发现在它们之间明显不同实现的详细信息。如果您决定在特定的区块链实现专用化,您将需要为了维护专业知识与其修补程序和更新保持同步。但我向您发出警告的这些通常新兴技术的动态性质意味着该书籍、 视频、 博客、 论坛和其他文档资源 fall 背后,有时这样就必须请查阅为特定的最新部署源代码区块链实现的权威性参考。

交易哈希链重新访问

我的上一篇文章讨论了事务哈希链数据结构,它可以跟踪数字资产所有权的。在本文中,我将深入更深入地该哈希链的工作原理。

向区块链的根支付 homage,我首先将重点放在有关比特币 Satoshi Nakamoto 重大影响白皮书 (bitcoin.org/bitcoin.pdf) 在 2008 年 10 月 31 日发布,2009 年 1 月 3 日的比特币启动前几个月。尽管实现细节以来更改具有相当的比特币然后白皮书保持一个有用的参考,特别是第 2 表示原始交易哈希链上的关系图设计概念。

该关系图的目的是传达如何构造交易哈希链以及数字签名授权的所有权序列传输。但是,它高度抽象,并且在这种情况下,是有点令人迷惑。若要添加清楚起见,我已构造描述了如何当前事务哈希链是否起作用的更详细的版本 (请参阅图 1)。

Satoshi Nakamoto 原始事务哈希链关系图的更新的版本
图 1 – 发布更新版本的 Satoshi Nakamoto 原始事务哈希链关系图

我已修订的图显示了三个事务 (0 开始,如原始文档中所示):事务0 alice,事务1 Bob 和事务2 有关 Charlie。第一个事务建立 Alice 数字资产; 的原始所有者其第二个事务将所有权转移给 Bob;其第三个事务将所有权转移给 Charlie。每个事务组成这些字段 (solid 大纲显示): 事务哈希、 数字资产 ID、 可选的数据、 公共密钥和签名。其他字段使用的但不是会存储在事务 (带虚线大纲显示): 私钥和新的事务哈希。在关系图表示字段值为带下标、 大小写混合的名称 — 例如,事务的哈希值事务0 是 TransactionHash0 和事务的公钥值2 是 PublicKey2

图 1是简化的事务哈希链,因为它跟踪仅单个数字资产,(DigitalAssetID0) 改变所有权 (与此相反,加密货币交易哈希链通常有多个数字资产输入和输出)。此外,不要混淆交易哈希链使用区块链,可聚合验证分解成块的事务。最后,交易哈希链通常不会存储为图所示的单个链接列表数据结构中。相反,它可以使用来构造 (快速,索引的辅助设备) 从存储在区块链的事务数据。

如我在我的上一篇文章中所述,因为每个新所有者的事务包含是反向链接到上一个所有者的事务的哈希值被保留的事务序列。在中图 1,前面的事务的事务哈希存储在当前事务时形成的返回链接。例如,Bob 的事务包含包含 Alice 的 TransactionHash 的事务哈希字段0 值,则为同样,Charlie 的事务包含交易哈希字段包含 Bob 的 TransactionHash1 值,等等。

返回链接是只是一种交易哈希链的多个数据完整性组件。链还强制实施转移所有权授权。若要遵循示例,假设 Alice 是世界上最细品尝红酒 purveyor 和想要维护跟踪运行状况取决于每个 bottle 她所拥有的分类帐。一天,Alice 将转到她葡萄酒 cellar,并决定她将将自己在其业务的区块链上注册为有效的每个葡萄酒她珍爱瓶装种子设定事务哈希链葡萄酒贮备,每个 bottle 的原始所有者。若要开始,她偶然获取 Cheval Blanc 1947 Saint Émilion bottle 并标记该 QR 代码包含一个唯一 id。然后她到她区块链客户端软件,作为一个节点在网络上运行扫描 QR 标签。该软件会扫描生成的代码将转换为数字资产 ID (DigitalAssetID0) 然后添加可选数据 (OptionalData0) 以及 Alice 的公钥 (PublicKey0)。如中所示图 1,这些字段是其自己空心矩形表示无符号的事务中。每个交易记录还包含交易哈希反向链接和签名,但由于这是哈希链中的第一个事务,这些字段为空白 (通过阴影字段为显示事务0)。

显示在每个事务上是唯一的事务哈希值,客户端软件计算通过 SHA-256 的哈希组合在一起的所有事务字段 (事务哈希、 数字资产 ID、 可选的数据、 所有者的公共密钥和签名)。同样,它是用作 DigitalAssetID 的下一个事务的反向链接此事务哈希值0

当 Bob,Alice 的曼哈顿餐馆的经理想要获取 Alice 的 bottle 的 Cheval Blanc 时,他使用其客户端软件生成新的事务的公共 / 专用密钥对。Bob 可以跳过此步骤并聚合所有下的单一的以前用过的公共密钥,其数字资产,但这样会不必要的风险公开与他联系。相反,他会生成新密钥对,并提供 Alice 他以前从未用过的公共密钥。这样一来,如果他曾失去配对的私钥,他将失去访问到单个数字资产。

Bob 的请求响应,Alice 将启动其客户端软件,并浏览其数字资产。她选择的事务 ID 关联使用 Cheval Blanc bottle Bob 想,然后 Bob 的公钥,它作为目标地址的一种提高一倍,从而启动传输请求。该节点然后创建一个新事务 (事务1) 包含上一事务哈希 (TransactionHash 的反向链接值0),数字资产 ID (DigitalAssetID 的值0) 有关 Cheval Blanc bottle (这是事务的数字资产 ID 相同的值0),与事务 (OptionalData 相关的任何自定义字段的值1),以及 Bob 的公共密钥 (公钥的值1) 因为 Bob 是此事务的所有者。

到目前为止,该节点已构造的无符号的新事务1 为 Bob。下一步是登录使用 Alice 的私钥的事务。这是一个关键步骤:Alice 当前拥有数字资产相关仅她可以授权给 Bob 的数字资产传输。

椭圆曲线加密

在中图 1,标签 1 和 2 指示事务已以及位置对其进行验证,分别。在其当前版本中,比特币区块链利用公钥加密 (PKC) 名为椭圆曲线加密 (ECC) 的实现。ECC 提供更强的加密结果和受欢迎的 RSA/Diffie-hellman 相比更短的密钥。区块链节点使用 ECC 生成非对称密钥对使用公式,其中涉及到在二维图上的随机选择的点。此方案允许丢失的公共密钥从私有密钥重新生成 (但当然不允许丢失的专用密钥的公共密钥重新生成)。

区块链建模后比特币还利用 ECC 谈到数字签名。与我在我的上一篇文章中所示的简化 PKC Rivest 仅使用 Adelman (RSA) 示例,不同的比特币现在将椭圆曲线数字签名算法 (ECDSA) (具体而言,SHA256withECDSA) 用于签名的事务。此算法用法稍有以不同的方式与其他签名技术:在 ECDSA,必须传递签名者的私钥以及使用 ECDSA 签名生成算法来创建签名的函数签名的消息 (此步骤将由中的标记 1图 1)。若要稍后验证该签名,必须传递签名者的公钥、 消息和签名使用 ECDSA 验证算法来生成 true 或 false 值,一个函数,该值指示签名有效 (此步骤将由标记 2在中图 1)。图 2总结了签名和验证使用 ECDSA。

椭圆曲线数字签名算法签名生成 (顶部) 和验证算法 (底部)
图 2 椭圆曲线数字签名算法签名生成 (顶部) 和验证算法 (底部)

在创建时使用 PKC RSA 的数字签名,你会验证签名通过比较哈希值,如我的上一篇文章中所示。对于一些好奇的人的用户,签名验证策略不可能通过 ECDSA。RSA PKC 是确定性的数字签名算法,因为每次使用给定的私钥签名给定的消息生成了相同的签名。另一方面,ECDSA,是不确定的:传递一条消息和一个私钥为 ECDSA 签名函数每次您将获得不同的签名。若要了解此操作,请转到bit.ly/2MCTuwI

继续上述示例,Alice 是要签名的事务的传输 DigitalAsset 的所有权0 向 Bob。节点软件通过她的私钥 (PrivateKey0) 以及一条消息 (NewTransactionHash1) 到 ECDSA 签名生成算法函数和作为输出 (签名中获取的签名1)。该节点将此签名值添加到新事务的签名字段。最后,该节点计算事务哈希 (TransactionHash1) 值,该值是所有事务字段,包括签名的 SHA-256 哈希。此时,该节点已成功生成签名的事务可以发送到事务池。

有符号的事务被视为未验证直到大亨节点验证。当大亨节点尝试验证 Bob 的事务时,它使用事务哈希反向链接来访问前一个事务的公钥,这会导致到 Alice 的事务0。一旦该节点有权访问前面的事务,它将传递该事务的公共密钥 (公钥0) 和新事务哈希 (NewTransactionHash1) 和 Bob 的事务 (签名中的签名1) 返回 true 或 false 值,指示是否该签名有效的 ECDSA 验证算法。

顺便说一下,Alice 的私钥 (PrivateKey0) 和新事务哈希 (NewTransactionHash1) 不会存储在该事务。不应将专用密钥值存储在区块链,并且没有无需存储新的交易哈希值,因为它需要时可以重新计算。

Bob 获取其服务器中的 corkscrew 并认为他将 savor Cheval Blanc,他从 Charlie,一个 Alice 的其他餐馆的管理器接收 Skype 调用时。Charlie 想要提供的啤酒欢迎新雇佣的 sommelier 特殊 bottle。遗憾的是,Bob 同意 Cheval Blanc 的所有权转移给 Charlie。他要求提供 Charlie 的公共密钥,且在同一进程以便传输 DigitalAsset 再次执行0 从 Bob 为 Charlie 的所有权。

现在存在 DigitalAsset 的三个事务0-一个用于 Alice、 Bob,来个和 Charlie 的一个。每个事务已验证且会并入区块链。特定事务,事务被视为一定数量的其他块具有顶部包含的块中挖掘后确认 (此"一定数量"是特定于实现的)。因此,特定的数字资产的官方所有者始终是具有数字资产的交易哈希链到最近一次确认的事务的私钥的人员。

需要达成一致意见

如您所见,交易哈希链是致力于以强制实施的数字资产所有权的数据结构。但请记住这些事务都存储在易受攻击的分布式、 分散、 异步、 公共网络上,公开给不一定使用区块链协议规则 (所谓"不良参与方") 的节点。结果是,恶意参与者节点无法验证实际无效或无法勾结破坏区块链的完整性在网络上的事务。

事务池为了防止这些事务完整性问题,所有事务都经过验证和确认过程。由单个节点的网络上创建每个事务。例如,假定在新墨西哥州阿尔布克是 Alice 和 Bob 是波士顿中。Alice 将她的数字资产的所有权转移给 Bob,事务的时1 新墨西哥州阿尔布克然后广播到网络上的其他节点中的节点来构造。同时,其他节点主动广播它们刚刚创建的事务。这些广播传播到其他节点上的全球网络,并花费的时间来传播这些事务由于网络延迟。无论在哪里上的全球网络事务产生,区块链协议中未验证的事务的事务池将所有新事务。

概念验证的工作和证明的开创性的工作中发出的概念验证工作 reward 区块链,大亨节点主动的方式选择的事务从事务池。它理应挖掘程序节点,验证每个事务,因为块包含任何错误的事务将立即拒绝的其他节点在构建候选区块时,这就意味着 naught 是节点完成的工作。

想起我的上一篇文章中查找它已经构造,使它能够获得财务 reward 并恢复演示概念的工作时所产生的能源成本的候选块 nonce 争用是每个节点。在撰写本文时,比特币区块链上获得当前的财务回报是 12.5 比特币 (BTC) 相当到大约 100,000 美元奖金。有时财务获得的回报是交易费,有时是财务奖励和事务费用。什么是一定要了解有关概念的工作是节点必须付出能源并产生才能获得的利润继续挖掘块; 的设备和基础结构成本对于为可承受的节点,这些成本的偏移量必须按收入。

它的不奇怪,然后,只要挖掘程序查找 nonce 则它立即广播到其他每个节点中,它只是试验来确定的块添加到区块链末尾希望网络上的块。比特币区块链,以便新 nonce 发现大约每隔 10 分钟,因此存在甚至几秒钟的延迟可能意味着另一个挖掘程序可能还查找 nonce 和广播其候选块校准其 nonce 的难度。

若要非常感谢丢失挖掘争用的意义,请考虑在时间中未找到 nonce 挖掘节点:所有这些消耗的能量被多余。挖掘人员 nonce 找不到具有要停止处理当前块,并通过获取并验证事务从事务池从头开始,别无选择。它们必须停止挖掘,只要它们了解找到 nonce 的另一个挖掘程序的原因是候选区块在区块链上具有的反向链接到前一个块的哈希。时另一个大亨挖掘经验证的块,用于链接到前一个块,落选挖掘者必须创建新的块引用新挖掘块的哈希值。落选挖掘者还必须放弃其之前选择和因为其他节点将拒绝任何新的块,它包含已包含在前一个块中的事务从事务池中选择一组新的事务。

节点必须承担所有支持其采矿设备所需的成本。如比特币区块链已增长,这导致另一种争用 — 功能最强大的采矿设备的争用。更多计算能力挖掘节点可以访问,更有可能它可以赢得每 10 分钟争用来解决加密难题所需查找 nonce。

一个常见批评的概念验证是电力的工作的鼓励曾经-更为强大的计算中心的构造和使用数量不断增长。竞争优势交给概念验证的工作支持区块链网络上最强大计算设备的所有者。例如,数百万的数据中心现在努力以独占方式挖掘比特币。根据digiconomist.net,比特币的年度区块链能源消耗,截至 2018 年 6 月是 71.12 TWh,类似于智利的年度能源消耗 (bit.ly/2vAdzdl)。

另一个广泛讨论的一致性算法是证明-的-大的风险,其中奖励演示网络经济利害关系的节点。可以说,最吸引人的概念-的-开创性的工作的是,它是能源效率。此外,它不会发出挖掘块加密货币奖励,尽管它 does 作为奖励发出交易费用。它还不需要一场比赛,若要查找解决加密难题的 nonce。相反,网络随机选择已将自己注册为"forger"(类似于比特币"大亨") 的总计值和其加密货币单位的年龄的节点。各种实现详细信息将努力确保公平,forgers 在其中选择中的随机性。例如,选择 forger 后它通常不能参与另一轮伪造至少 30 天。实际上,包含最早的加密货币硬币的高价值 forger 节点高于其他 forger 节点边缘。

证明的开创性的工作的支持者,请运行一个节点的成本是低得多好鼓励更多参与和更高级别的分散化。讽刺的是,但是,概念验证息息相关系统不鼓励用于的加密货币区块链旨在 transact 因为支出将减少节点的总值,并降低选择作为 forger 的可能性。

要考虑的一点是所做的区块链专家 Andreas Antonopoulos 的点:"概念验证的工作也是证明息息相关,但概念的开创性的工作也不是概念验证的工作"。 他介绍了概念验证的工作,提供了这两个一致性算法,从而在点,而不选择挖掘者参与概念验证的工作支持网络的组合数或年龄的加密货币单位,挖掘程序节点上有效地基于资助加入所需的能源演示网络中的其经济投资。因此,"利害关系"概念验证的工作方案中,他认为是节点是愿意承担精力来成功我一个块中的电力成本 (观看 Antonopoulos 硅谷比特币会议演讲 2016 年 9 月 13 日: bit.ly/2MDfkA1).

最长的链区块链网络不断扩展、 分支和修剪本身。称为块树; 区块链的整个视图。每个挖掘程序节点主动挖掘针对终止块树的最长的链的块。您可能认为最长的链定义的具有最多的块,链,但它实际上被定义为从区块产生最大程度的工作的块的序列。可以由总和的每个块的"难度"派生总工作 — 如何不太可能,则发现的候选块的 nonce 的度量值。网络协议维护此值,它比特币区块链调整每个 2,016 块,以便块需要大约 10 分钟的处理时间来挖掘。难度值存储在每个块,以便可通过正在尝试标识最长的链的节点计算工作。

有时,它是不可避免的两个节点,A 和 B,将通过在数秒或甚至毫秒为单位的每个其他挖掘新的块演示概念的工作。因为每个节点将其新的块添加到其看到的内容为最长的链广播到网络该块之前结束,将出现在块树分支 (分支)。根据这些节点的位置和连接的网络和其他延迟注意事项的节点的带宽,网络的某些部分首先会作为新的块中出现一个块,并会将其添加到链的末尾。网络的其他部分会看到块 B 作为新的块,并且会将其添加到链的末尾。这会使某些节点与一个块和其他人作为终止块的块 B 开头 (请参阅图 3)。

(前)块树显示块树分叉和两个相等长度供应链 (底端);显示一个块树分支和一个最长的链块树
图 3 (顶端) 一个块树显示块树分叉和两个相等长度链 (底端);显示一个块树分支和一个最长的链块树

一个分支发生时,在顶部所示图 3,这两个链位于块树 — 它们是相等的长度,并且两者都是有效。在考虑它们开始挖掘,因为它们需要为该链终止块哈希之前挖掘节点寻找最长的链时,这种的问题是清除。

如果挖掘程序成功挖掘块 C,并且正在处理链的它会将块 C 添加到具有作为其终止块的块的链的末尾 (请参阅中的底部块树图 3)。后,它到网络广播块 C,其他节点将看到一个链是最长的链。处理链 B 上的节点将看到一个链的长度超过链 B 并将停止的挖掘其当前阻止,因此他们可以开始来挖掘新的块,可扩展 A.链上的块 C一旦发生这种情况,网络,以便他们可以选择在挖掘的新一轮中释放所有块 B 中恢复到事务池的事务。

您可能想知道创建块 b: 大亨可获得比特币会发生什么情况永远不会发出其事务佣金和块奖励。在比特币网络中,这些奖励未被授予到大亨直到 100 块成功挖掘顶部有问题的块。

在本文中,我探讨了中更详细地介绍一些我的上一篇文章中引入的主题。在一起,两篇文章涵盖了大部分必须真正理解了解区块链如何工作的基本概念。阅读完后两者,应该了解区块链的分散、 分布式网络体系结构;SHA-256 哈希;PKC 和 ECDSA 的基础知识;如何节点构造事务哈希链上和数字签名授权数字资产所有权; 的转换事务池中的事务选择和验证之前获取到块; 确认的 await专用的节点采用特定的一致性算法 (例如"挖掘"使用证明的工作或使用证明的开创性的工作"forgers") 的方式来生成块;和如何在网络上的节点中添加生成块的最长的链。如果你想要深入了解区块链,我强烈建议的书籍和视频可在 Safari 联机丛书 (safaribooksonline.com) 和发布的 Andreas Antonopoulos (antonopoulos.com).


Jonathan Waldman是 Microsoft 认证专业软件工程师,解决方案架构师使用深入的技术遭受各种行业和软件人体工程学中的专家。Waldman 是 Pluralsight 技术团队的成员,目前负责机构和私企软件开发项目。他可以到达jonathan.waldman@live.com并在 Twitter 上按照: @jwpulse

衷心感谢以下 Microsoft 技术专家对本文的审阅:James McCaffrey


在 MSDN 杂志论坛讨论这篇文章