首页 区块链:去中心化账本
文章
取消

区块链:去中心化账本

上一篇文章讲到比特币网络需要一个记录从比特币诞生之日起所有交易记录的账本。

这个账本是去中心化的,所以不仅记录是公开的,所有人都可以查看,而且所有人都可以进行记账。然后账本记录的交易之间需要有明确的先后顺序以防止“双花”问题。

其实这里还隐藏了一个必要的属性,那就是不可篡改。这个应该很好理解,毕竟是记账的账本,如果可以随意修改,那就乱套了。

所以我们总结一下比特币网络的这个账本必须满足的三个要求,即:

  1. 不可篡改
  2. 时间属性:明确的先后顺序
  3. 去中心化:公开,所有人都有查看和记账的权利

为满足这些要求,中本聪设计了一种去中心化的账本,即区块链。

顾名思义,区块链就是很多个区块链接在一起形成的链。就像铁链一样,一环套一环,而每一环就是一个区块。

比特币的区块记录了一段时间以内比特币网络上发生的交易信息(10分钟左右)。所以区块实际上是一个个交易信息的打包块,或者说是这段时间区间内的一个小账本。

比特币白皮书中的示例如下:

区块

在图中,我们可以看到,一个区块主要由以下几部分组成:

  1. 哈希(上一个区块的哈希值,其实还有本区块自身的哈希值,图中未标出)
  2. 这段时间网络上发生的若干笔比特币交易信息
  3. 一个随机数(随机产生的一串数字)

每一个区块里都保存了上一个区块的哈希值,而这个区块自身的哈希值则是通过上一个区块的哈希值、随机数、存储的交易数据等计算出来的。即,本区块的哈希为H(上一个哈希+随机数+交易数据等)。

我们在之前介绍哈希的文章中曾提到,哈希的一个神奇之处在于,一旦修改哈希函数的输入值,则得到的哈希值会发生毫无规律的变化。这也就意味着,如果你想要篡改一个区块中的交易数据,则这个区块的哈希值H(上一个哈希+随机数+交易数据等)也就发生了变化。

那么你将不得不从整条区块链上你要篡改的那个区块开始,将之后的每一个区块都进行一次计算和修改。这就像多米诺骨牌一样,一个变了,后续的都得变。

这样的哈希链式设计,再加上我们下一篇文章要讲的POW(Proof Of Work,工作量证明)共识算法,就可以保障区块链的不可篡改性。

每个区块中的哈希将众多区块链接成了区块链。每个区块大概记录的是十分钟这样一个时间区间内网络上发生的交易记录。这样,整条区块链上就记录了比特币自诞生之日起发生的所有交易信息。

随着时间的推移,包含新的交易信息的新区块也不断被加入到这条链的末尾,这条链也就越来越长。我们可以认为,在区块链中位置较为靠前的区块中的交易比位置靠后的区块中记录的交易发生得早(准确的说法应该是被确认的早,两者的区别我们后续讲区块的打包时会讲到)。

这就是满足了账本的时间属性,我们可以明确交易发生的先后顺序。

每个参与比特币网络的人都可以从互联网上下载到区块链的完整数据,这满足了前边提到的账本的公开性。

而如果每个人都能轻松地获取到完整的账本,那么自然而然,每个人都拥有了记账的权利。

所谓记账,就是记录一段时间以内网络上发生的交易信息。因为比特币网络的交易需要将自己的交易信息广播到网络中去。记账的节点不仅需要记录自己的交易,还需要记录从网络中收到的交易信息。对于区块链来说,记账就是创建一个新的区块。

这就是所谓的去中心化网络。每个人都可以查看到公开的账本,每个人也都可以参与记账。

还拿记录课堂笔记来举例。

一个班级有五十个同学,现在有一堂课程(十分钟的时间),课程的主题是“讨论先有鸡还是先有蛋的问题”。课程中不设具体的管理者和发言人,而是每个同学都可以参与讨论,畅所欲言(对应比特币网络中每个人都可以进行交易)。在课程结束后,学生们需要把课堂里讨论的内容如实写到教室后边的黑板报里进行公示。

每个同学都可以记录在这堂课中发生过的所有发言和对话。不仅是记录自己的发言还要记录其他同学的(对应比特币网络中的记账/区块链的创建新区块)。甚至,有些同学整堂课程都没有说一句话(没有进行一笔交易),他/她也还是可以记录所有的发言和对话。

那么当课程结束后,五十个同学就有了五十个课堂笔记(账本/区块)。有的同学出于某些原因可能会篡改自己或者别人的发言,所以每个笔记/账本/区块的内容可能是不一样的。

因为有出黑板报的需求,所以必须在学生们的笔记中选一个出来写到黑板上。这个笔记必须是最符合实际情况的,不能有假。

那么应该如何从五十个笔记中选一个出来呢?也即如何让大家对“哪个同学的笔记最真实可信应该上黑板报?”这个问题达成共识。

在实际生活中,常见的解决办法是把大家的笔记集中起来,然后全员进行投票,票数最多的上黑板报。但这种操作一般就需要有班长这样的中心化角色来负责了。

所以在一个实际的去中心化网络中,投票这个事情会变得非常困难和复杂。

因为网络的节点众多,而且网络是不稳定的,节点随时有可能下线。甚至节点都不一定是诚实节点,它加入网络的目的可能就是发送假的消息。这一切让达成共识这个事情变得非常困难。

著名的“拜占庭将军问题”就是说“在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的”。该问题的具体描述援引百度百科上的内容如下:

“拜占庭罗马帝国国土辽阔,为了达到防御目的,每个军队都分隔很远,将军与将军之间只能靠信差传消息。在战争的时候,拜占庭军队内所有将军和副官必须达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。”

中本聪使用POW(Proof Of Work,工作量证明)机制来解决去中心化网络中的共识问题。下一篇文章我们就来聊聊POW。

最后推荐一个开源的区块链学习网站,blockchaindemo。通过这个网站,大家可以自己去创建区块、区块链,创建多个结点以及一整个P2P网络。这样能对区块链有更好的理解。大家点击阅读原文即可直接访问,或者通过浏览器访问https://blockchaindemo.io/即可。

(写在最后:看到去中心化网络的共识机制让我想起几年前被分布式数据库中复杂的一致性协议支配的恐惧(老人.地铁.手机.jpg),有时间的话再研究一下他们的联系和区别吧,到时候我也会发文章出来)

本文由作者按照 CC BY 4.0 进行授权

比特币是一条数字签名链

比特币的共识协议:Proof of Work工作量证明机制