[区块链]01.什么是区块链
一. 例说区块链
以前,农村里对出工或买卖种子肥料都会依靠一个账房先生来管账,但是这种一人掌握大权无人监督的情况很容易出问题。
后来大家采用新的记账方式:每个人都拥有一本自己的账本,任何一个人改动了账本都必须要告知所有其他人,其他人会在自己的账本上同样地记上一笔,如果有人发现新改动的账目不对,可以拒绝接受,到了最后,以大多数人都一致的账目表示为准。而且大家开会决定,每天早上掷骰子,根据点数决定谁来记当天的账,其他人只要核对一下,没问题就复制过来。
这时,账本的记账权就变成了这样:
而且大家一致同意,每天被掷到要记账的人,能获得一些奖励,从当天的记账总额中划出一定奖励的比例。
这就是区块链的雏形了。
所以,区块链在本质上就是一种记账方法,当然了,并不是通过人来记账的,而是通过一种软件,称为区块链客户端,这种运行起来的客户端称为节点。一个个节点串联起来形成网络,网络能互相通信。而在区块链软件的结构中,这种互相通信的功能称为“网络路由”。
区块链技术属于一种可以用来实现各种不同的业务功能的技术方法,小到日常记账,大到各种复杂的商业合约等等,记录的数据也就不同了。
网络中的节点是独立记账的,可是记账的内容要想保持彼此一致,需要设定一种游戏规则,通过这个规则筛选出一个节点,一段时间内的账务数据都以这个节点记录的为准,这个节点记录后会把数据广播出去,告诉其他的节点,其他节点只需要通过网络来接收新的数据,接收后各自根据自己现有的账本验证一下能不能接得上,有没有不匹配和不规范的,如果都符合要求,就存储到自己的账本中。在区块链系统中,这个所谓的游戏规则称为“共识算法”。
有些区块链系统会设计出一种带有竞争的机制,让各个节点去抢,谁能抢到这个机会谁就能获得打包数据的权力并且同时获得这笔奖励,在这种情况下,我们会形象地将这个竞争的过程称为“挖矿”。
问题来了,这么多节点,我们怎么去标记不同的使用者呢?
实际上是通过一种公开密钥算法的机制来实现的。公开密钥算法拥有一对密钥,是彼此配合使用的,可以互相用来加解密。其中一个叫私钥,另外一个叫公钥,公钥可以公开,私钥要自己保管好。用公钥加密的数据必须用对应的私钥来解密,而用私钥加密的数据必须用对应的公钥来解密。在区块链系统中,公钥就是用来用户身份识别的,公钥经过一系列复杂的转换,最后得到一个称为“地址”的转换结果,这个“地址”就能代表一个用户。这种节点间通过密钥算法来加密解密在公共网络中实现定向发送数据的功能设计就称为“脚本系统”。
所以,整个区块链的技术理念,其实就是大家共同来参与记账,通过一种规则(共识算法)不断地选出账务打包者,其他节点接收验证,并且每个用户都有一对密钥表示自己(密钥算法),通过脚本系统的功能实现在公共网络中定向发送有价值的数据。
区块链技术,实际上就是围绕以下两个问题展开的:
-
如何保持数据的一致。
-
如何让公共账本的数据不被篡改。
而解决这些问题需要了解一下区块链的技术栈。
二. 区块链的技术栈
区块链是将产生的数据按照一定的时间间隔,分成一个个的数据块记录,然后再根据数据块的先后关系串联起来,也就是所谓的区块链了。
区块链的技术栈最基本的技术组合如下图所示:
这些零部件装配在一起,组成了一个区块链软件,运行起来后就称之为一个节点,多个这样的节点在不同的计算机设备上运行起来,就组成了一个网络。在这个网络中每个节点都是平等的,大家互相为对方提供服务,这种网络被称为点对点的“对等网络”。
下面分别说明一下各组成。
1. 区块链账本
它表示一种特有的数据记录格式。区块链,就是“区块+链”,所谓的区块就是指数据块的意思,每一个数据块之间通过某个标志连接起来,从而形成一条链,如下图所示:
区块中主要包含了交易事务数据以及区块的摘要信息。比特币中区块链数据的组成示意图:
可以看到区块数据在逻辑上分成了区块头和区块体,每个区块头中通过梅克尔根(梅克尔根也称为“梅克尔根哈希值”,可以认为就是一个区块中所有交易事务的集体身份证号。)关联了区块中众多的交易事务,而每个区块之间通过区块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来。这种链条格式最大的特点就是一环扣一环,很难从中间去破坏,如果一个节点的数据被篡改了,那么其他节点是不会验证通过一个被篡改的数据的,因为跟自己的本地区块链账本数据匹配不起来,这也是区块链数据不可篡改的一个很重要的技术设计。
2. 共识机制
在区块链系统中,每个节点必须要做的事情就是让自己的账本跟其他节点的账本保持一致。如何让每个节点通过一个规则将各自的数据保持一致是一个很核心的问题,这个问题的解决方案就是制定一套共识算法。