区块链架构
前言
区块链是一种由计算机组成的网状网络,这些计算机彼此相连,而不是连接到中央服务器。此网络中的计算机定义并同意共享的数据状态,并遵守对这些数据施加的某些限制。
这个共享状态只是一个分布式状态机,每个“块”都会对当前已知的共享状态进行改变。
关于比特币
交易
交易是赋予区块链用途的因素。它们是区块链系统的最小组成部分。
交易通常由收款人地址、发款人地址和金额组成。这与信用卡账单上的标准交易没有太大区别。
比特币交易将一些比特币的价值从一个地址转移到另一个地址。
交易会改变商定的正确区块链的状态。区块链是一种共享、去中心化、分布式状态机。这意味着所有节点(区块链系统的用户)都独立持有自己的区块链副本,当前已知的“状态”是通过按区块链中出现的顺序处理每笔交易来计算的。
交易以区块的形式打包并传送至各个节点。随着新交易在整个网络中分布,它们将由各个节点独立验证和“处理”。
这种货币的不断流动构成了任何区块链架构内的数据,而交易的处理和验证方式因实施方式而异。
交易格式
输入数据结构中还包含一个scriptSig。这是一个加密签名,可证明此交易的创建者可以根据其输入创建该交易。
请记住,输入是对之前交易的输出的引用。
scriptSig包含引用交易输出的地址,以及当前交易的ECDSA 签名。
这证明当前交易是由该支出引用交易输出的所有者创建的。
它是如何开始的?
一开始只有一笔交易。
它没有输入,只有输出,将一些价值记入某个地址(Bob 拥有)。没有输入,因为输入引用了之前交易的输出。这是第一笔交易。所以没有输入。
最终,Bob 会想通过将该价值转移给其他人(Alice)来消费它。因此 Bob 创建了一个交易。
该交易有一个输入,它是对第一个交易的输出的引用 - 请记住:Bob 控制原始输出记入地址的密钥。
该交易有一个输出,即 Alice 持有私钥的一些公共地址和要发送的货币数量。
现在 Alice 控制这个值。
凭借她的私钥,她能够签署另一笔交易,将她收到的金额发送到由其他实体控制的另一个地址。
正是这种使用“交易”随时间推移进行的简单价值转移机制创建了区块链。每笔交易发生时,都会被添加到区块链账本中,这引出了下一个主题:区块、矿工和验证。
区块
区块是一种数据结构,其目的是将交易集合捆绑在一起并分发到网络中的所有节点。区块由矿工创建(下面将详细讨论)。
区块包含一个区块头,它是帮助验证区块有效性的元数据。
典型的区块元数据包含:
version - 区块结构的当前版本
前一个区块头哈希——该区块的父区块的引用
merkle 根哈希 - 此区块中包含的所有交易的加密哈希
时间 - 该块的创建时间
nBits -创建此区块所用的当前难度
nonce(“一次性使用的数字”)——一个随机值,区块的创建者可以随意操纵该值
这 6 个字段构成了区块头。区块的其余部分包含矿工选择包含在其创建的区块中的交易。
用户创建交易并将其提交给网络,这些交易位于池中等待被纳入区块。
重要的是要意识到,每个矿工(更广泛地说,区块链的每个用户)都可以在这个区块链系统中随心所欲地行事。共识规则规定,只有对区块链的有效更改才会被其他人接受。这导致系统在经济上保证只有有效的区块才会被处理、提交到网络并被更大的社区接受。
玩弄系统在计算能力方面成本极其昂贵,而且回报甚微。
从设计上来说,区块链是概率系统。节点或网络中的计算机独立决定并一致认定哪个“区块链”最长且最有效。当一个区块在网络中创建和设置时,每个节点都会处理该区块并决定其在当前总体区块链账本中的位置。
矿业
哈希
哈希函数具有一些属性,使其适合用于创建工作量证明,这是比特币网络中的一个关键概念:
哈希函数将任意大小的数据转换为固定长度的哈希输出
它们是一对一的:相同的输入将始终提供相同的哈希输出
它们是单向函数:不可能“向后工作”,并根据哈希输出重建输入。
一些常见的哈希方案可以在这里找到。作为参考,比特币使用 SHA-256 哈希算法进行工作量证明。
点击此处详细了解工作量证明架构的替代方案。
由于哈希,即使编辑区块头的一位也会导致不同的哈希值。因此,更改随机数将创建一个新的哈希值,以便与当前难度规则进行交叉检查。对于每个新的潜在区块,必须反复执行此过程,直到找到有效的哈希值。
当矿工确实在块模板内找到了能够产生有效哈希值的正确数据配置时,所有其他节点可以很容易地对该块执行相同的哈希值函数,并验证它确实会产生有效的哈希值。
挖矿奖励
矿工必须有某种激励才能投入创建有效区块所需的工作。在比特币中,这种激励是通过coinbase 交易创建新的硬币。这是一种存在于每个区块中的特殊交易,它没有输入,并且有一个指向(大概)矿工控制的地址的输出。如果矿工的区块被网络接受,他们的地址就会被记入这些新的比特币。
挖矿“难度”通常会随着网络的发展而不断调整。难度是一种共识规则,它定义了创建有效区块需要做多少工作。当区块的头部经过哈希处理,产生一个结果证明已经完成了足够的工作时,区块就是有效的。
如何证明这一点?哈希值必须符合某种格式。在比特币中,从高层次上讲,这种格式是“区块哈希值必须以一定数量的零开头”。
例如,比特币区块 488485的哈希值为00000000000000000008c8aa76452c5b0b422be963b1f9813538ec374178a6826。这是一个以 18 个零开头的哈希值。考虑到上面定义的哈希函数的属性,从任意区块结构中找到以当前难度级别 18 个零开头的结果哈希值极其困难。
网络中的任何其他参与者都可以相信,如果他们收到此区块,则必须花费大量计算能力才能找到生成该区块的正确数据组合。为了补偿矿工的时间和精力,整个网络同意允许矿工将铸造新币的 coinbase 交易作为奖励。
共识
所有这些先前的独立节点检查和验证交易和区块有效性的概念被称为共识。
区块链的共识是通过一套每个人都遵守的编纂规则来实现的。这些规则完全是自我执行的。随着区块链网络规模的扩大,越来越多的节点和矿工参与其中,由于执行自己规则的参与者数量众多(其他人也在执行),整体共识会变得更加强大。
以比特币的共识规则之一为例:coinbase 交易的金额。每个人都遵循的规则基于代码,该代码规定每 200,000 个区块交易价值应减半。
前 200,000 个区块产生了 50 BTC(比特币)的奖励。第 200,001 到第 400,000 个区块产生了 25 BTC 的奖励。在撰写本文时,比特币的区块链长度约为 488,000 个区块,这意味着现在每个区块产生 12.5 BTC。
如果一个矿工今天决定生产一个区块,奖励 15 BTC,而不是 12.5 BTC(记住,每个矿工都可以创建他们想要的任何类型的区块),那么网络的其余部分将收到他们的区块,按照他们自己的共识规则运行它,并忽略该区块,因为它不符合模型。
由于该区块无效,所以它会被其他所有人丢弃,而且没有人会接受这个恶意矿工试图获得高于当前利率的奖励的行为。
另外:正是这种“奖励减半”赋予了比特币约 2100 万枚的上限。比特币可以整除到小数点后八位,因此最终奖励将减半至 0。
整个网络独立地就找到新区块的奖励达成一致。试图“超越规则”并不违法,甚至不是错误的(请记住,任何人都可以做任何他们想做的事情)。但是,如果您希望您的交易或区块被网络接受,您必须遵循与网络中所有人相同的规则,否则您将面临不符合共识标准和验证被忽略的风险。因此,共识为区块链交易增加了另一层安全性。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~