区块链协议概述(第一部分)

区块链是一台信任机器。用密码学保存对等分布式、不可变和带有时间戳的公共识分类帐,其中存储所有过去的交易,每个交易引用一个分类帐行项目。这个分类账的一页是指一个交易区块,每个区块都与最后一个区块相连。基本上可以说,区块链是参与系统的所有各方执行和共享的所有数字事件(例如交易)的总账,其中交易的每个块都是由最新的大多数各方的共识确认的。一旦添加了一个块,交易记录就不能被审查、伪造或倒置。

区块链协议概述(第一部分)

区块链的三个主要好处如下:
·记录的不变性——每个参与者都可以自愿更新和共享记录。
·信任脱媒——由于信任在网络上的分布,消除或至少降低了信任第三方的风险。
·智能合约——义务易于复制,区块链具有安全性、可验证性、不可变性。
所有基于区块链的系统更新速度快,无边界,永久的。
区块链技术的可用性最受欢迎的例子之一是数字货币——比特币,它是区块链技术的基础,工作非常完美,在金融和非金融领域得到了广泛的应用。比特币是第一个实现将在线支付直接从金融部门发送到另一方的概念。
为了在下一节中更好的理解区块链技术,我们将基于2009年中本聪(Satoshi Nakamoto)首次撰写的比特币论文(该论文的作者是设计比特币并创建其原始参考实现的匿名者),介绍区块链的比特币工作分析。作为实现的一部分,他/她/他们还设计了第一个区块链数据库)。
比特币分析
对等电子现金是指两个实体之间在没有第三方的情况下进行电子交易的系统。该系统为拜占庭将军的问题提供了解决方案,问题是两个或多个远程实体如何在彼此之间发送消息,同时确保这些消息是真实的,不受操纵。拜占庭将军是指:一般的将军们正试图协调攻击或撤出城市,他们试图这样做与他们的助手从所有方面,但他们不知道如何发送消息给所有其他的组织和军队同时攻击或撤退的时间。此外,可能有阴谋者正计划攻击将军,并误报攻击或撤退。如何确保通过群组发送的信息是合法的,而不是在整个过程中被操纵,因为可能会有叛国的人。这将导致网络变得极其腐败和毫无价值。这篇比特币论文提出了一种使用点对点网络的解决方案,并排除了重复消费的问题。网络时间戳和通过将交易哈希值发送到一个正在进行的分类帐中来记录交易,这个分类帐是一个基于哈希值的工作证明分类帐,在不重新进行工作证明的情况下是不能更改的。哈希函数用于生成与验证数据完整性的输入相对应的固定长度的数据位。相同的输入总是产生相同的哈希值输出。图2展示了哈希值的几个例子。
哈希算法有很多,但在本文中使用SHA-256,这意味着输出数据的固定长度是256位。
工作证明是一种阻止DDoS攻击甚至垃圾邮件的方法,但也可以用于网络保护,原因与DDoS攻击和垃圾邮件非常相似。所以野蛮的强迫或一次又一次的尝试去破坏一些东西会变得非常昂贵。为了更深入的理解,我们假设一个网页正在使用工作证明系统来阻止DDoS攻击。每次访问此网页时,计算机都需要解决一个计算问题,以验证其对web服务器的请求。工作证明的主要目的是使野蛮攻击、DDoS攻击或垃圾邮件的成本在CPU能力方面相当高。所面临的挑战是使工作证明系统不对称,这样主服务器就可以随意而简单地确认正确的答案。
为了更改或伪造当前块,攻击者首先需要计算前面的每个块并重新执行所有工作。因此,只有控制网络51%的计算能力,攻击者才有可能制造出一条更长的链。然而,保持51%的CPU功率是非常昂贵的,并且不值得,因为攻击网络的回报小于与网络合作的回报。因此,只要动机是经济上的,攻击在经济上是不可行的。
交易
代币的转移是通过数字签名完成的,数字签名的形式是前一个交易的哈希值和下一个所有者的公钥。在非对称密码学中使用公钥,其中用于转换数据的加密或签名的是公钥,用于解密的是私钥。这两个密钥在数学上是链接的,因此私钥的所有者可以解密数据。
问题是,由于代币是电子性的,它很容易被复制,会让网络面临双重支出的问题。此外,将来拥有这枚代币的实体也可以复制它,因此就会有一种通过使用使代币成倍增加的制度。一个常见的解决方案是引入一个受信任的中央授权,该授权将确认每个交易都是合法的,并且交易的唯一受信任版本将是来自中央授权。在这里,中央权威的是整个网络,它知道所有的交易。因此,交易是公开宣布的,系统的参与者同意接收订单中的单个交易历史记录。在每个交易发生时,收款人需要证明网络中的大多数节点都同意该交易是第一个接收到的。因此,收款人需要知道没有以前版本的交易已经完成,以避免重复支出的问题。交易需要存储在每个节点都可以实现的公共大型分类帐中。所以节点的分类账是复制的。为了确保交易还没有完成,出现了一个基于哈希值的时间戳服务器的建议。
时间戳服务器

时间戳服务器的工作方式是获取要加盖时间戳的项的哈希值并广泛发布哈希值。显然,为了进入哈希值,数据必须在当时存在。每个时间戳在它的哈希值中包含前一个时间戳,形成一个链,每个额外的时间戳加强它前面的时间戳。

区块链协议概述(第一部分)

Proof-of-Work(工作证明)
要在对等基础上实现分布式时间戳服务器,我们需要使用一个类似于Adam Back的Hashcash的工作证明系统。Hashcash解决了大量请求(如电子邮件垃圾邮件或拒绝服务攻击)的问题。它使用哈希值来引入CPU成本,比如处理成本,当发送电子邮件时,它必须首先解决一个消耗CPU能量的问题。对于攻击者来说,如果没有极高的CPU能力,几乎不可能解决这一个难题。这个难题非常具有挑战性,而且成本很高,应该很快就能得到服务器的验证。Hashcash使用SHA-1,这意味着哈希算法的输出是160位,而比特币系统使用SHA-256,这意味着哈希算法的输出是256位。我们将在后面的小节中讨论SHAs。Hashcash的工作原理如下:有一个服务器向发出请求的计算机提出一个挑战,然后计算机接受这个挑战并使用它作为起点,并在挑战字符串的末尾添加随机字符。这些随机字符被称为nonce。nonce在密码学中用于防止重复攻击。它是任意的,附加到末尾,只能使用一次。每个nonce都必须是惟一的。如果任何一个节点试图重用相同的nonce,它将导致失败。因此,任何节点都不能连续使用前面的答案来“欺骗”系统,因为nonce将作为无效返回。这意味着,为了伪造或更改先前的块,攻击者将别无选择,只能重新执行后续块的所有工作。
但是,要解决这个问题,使用Hashcash生成的最后一个字符串的哈希值需要从X个0开始。基本上,工作证明涉及到扫描哈希时的值,例如SHA-256,哈希值以零位开始。工作证明也解决了多数决策中确定代表性的问题。如果大多数是基于一个IP地址一票的方式,那么任何能够分配许多IP的人都可以颠覆这种方式。工作证明本质上是一个cpu一票。
如果回报太大,系统就会通过加大开采难度来解决,因此供应总是稳定的。比特币由供求关系决定,但供应和需求在一定程度上是由比特币系统本身控制的。比特币作为一种管理自身通胀的系统,如果解决得太快,就会增加难题的难度。因此,伪造网络的代价是极其昂贵的。
网络
运行网络的步骤如下:
·新交易广播到所有节点。
·每个节点将新交易收集到一个块中。
·每个节点都在为它的块寻找一个困难的工作证明。
·当一个节点发现一个工作证明时,它向所有节点广播该块。
·只有在块中的所有交易有效且尚未使用时,节点才接受块。
·节点通过在链中创建下一个块来表示对该块的接受,使用接受块的散列作为上一个哈希值。
作为一个规则,节点选择接受最长的链,因为这是网络中CPU能力最强的链。最长意味着拥有最多CPU投票。如果两个节点同时广播一个新块,那么网络中就会有两个不同版本的新块,它们都将致力于实现下一个块。谁先到达下一个块,这意味着解决了首先解决了工作证明问题。
激励
参与这个网络的动机是获得代币作为奖励。这里的主要成本是CPU时间和电力。在2140年,所有的比特币都将被开采出来用于比特币,支持该网络的比特币将不再获得奖励。
交易费用是下一个激励因素。如果交易的输入值大于其输出值,则差额作为交易费添加到包含该交易的块的激励值中。一旦预定数量的代币进入流通,奖励可以完全不需要面对通货膨胀带来的压力。
这种激励可能有助于鼓励节点保持诚实。如果一个贪婪的攻击者能够聚集比所有诚实的节点更多的CPU能力,他将不得不在使用它通过偷回他的付款来欺骗人们或使用它来产生新的硬币之间做出选择。  他应该会发现,遵守规则比破坏制度和自己财富的有效性更有利可图,这些规则给他带来的新硬币比其他人加起来还多。
回收磁盘空间
一旦代币中的最新交易被足够的块所覆盖,那么在丢弃它之前所花费的交易就可以节省磁盘空间。为了在不破坏块哈希值的情况下实现这一点,交易被哈希在一个Merkle树中,只有根包含在块的哈希值中。首先,我们将讨论什么是Merkle树。Merkle树是交易哈希值的树。在树的底部,对每个交易进行哈希,然后对第一个哈希值的输出进行哈希,直到没有为止。Merkle树的根是最后一对哈希值。在图4中展示了构建四个交易的Merkle树的示例。

区块链协议概述(第一部分)

由于比特币系统使用SHA-256, Merkle根中的最后一个哈希值将是256位的字符串。
系统所面临的挑战是前面的哈希值,它由一定数量的0和Merkle根开始。每个块头包含前面的哈希值、Merkle根和惟一的nonce,如图5所示。工作证明的解决方案是找到一个唯一的nonce,使块头的最后哈希值以一定数量的零开始。
在理论上,除了当前块之外,只需要保留每个块头的完整历史记录。
没有一个交易的块头= 80字节,且每10分钟出现一次。6个块头会在1小时后到达。经过合理的计算,我们可以看到它的大小为每年4.2 MB。因此,即使块头保存在内存中,存储也不是问题。

区块链协议概述(第一部分)

未完待续…