区块链,英文区块链,本质上是一个去中心化的分布式数据库。任何人只要架设好自己的服务器,接入区块链网络,就可以成为这个庞大网络中的一个节点。
既然区块链本质上是一个数据库,那么里面存储了什么呢?我们来看看区块链的基本单位:块。
一个区块分为两部分:
1.块标题
头存储块的头信息,包括前一个块的预哈希、块体的哈希、时间戳等等。
2.分程序体
块体存储该块的详细数据,包含几行记录,可以是交易信息,也可以是其他一些信息。
刚才提到的哈希值是什么意思?
大家一定听说过MD5,这是一种典型的哈希算法。它可以将任意长度的明文字符串转换成固定长度(128bit)的字符串,这个字符串就是哈希值。
在我们的区块链中,我们使用一种更复杂的哈希算法SHA256。经过一系列复杂的计算,最新的数据信息(如交易记录)最终会被这个哈希算法转换成一个长度为256bit的哈希字符串,即块头中的哈希,格式如下:
A8 FDC 205 a 9 f 19 cc 1c 7507 a 60 C4 f 01 b 13d 11 D7 FD 0
与块Hash是一一对应的,可以看作是块的唯一标识符。
不同的区块是如何相互关联的?依靠哈希和预哈希来关联。每个块的预散列值等于前一个块的散列值。
什么是采矿?
为什么要计算块的哈希值?
由于区块链是一个链状结构,所以链中必然有一个头节点(第一个块)和一个尾节点(最后一个块)。一旦有人计算出区块链最新数据信息的哈希值,相当于把最新的交易记录打包,就会产生一个新的块,连接到区块链的末端。
新块头的Hash就是刚刚计算的Hash值,PreHash等于前一块的Hash。区块的数据存储的是打包前的交易记录,这部分数据信息已经变得不可修改。
计算哈希值并创建新块的过程称为挖掘。
用于海量计算的服务器叫矿机。
哈希值的计算难度在哪里?我们来做一个最简单的解释。计算哈希值的公式如下:
Hash=SHA-256(最后一个块的Hash,新块的基本信息,交易记录信息随机数)
其中,交易记录信息也是一串哈希值,其计算涉及一个数据结构Merkle树。有兴趣的伙伴可以咨询相关资料,我们暂时不做介绍。
这里关键的计算难点在于随机数的生成。猥琐区块链的发明者为了增加Hash的计算难度,要求Hash结果的前72位必须全部为0,这实在是太小了。
因为(上一个块的Hash,新块的基本信息,交易记录信息)是固定的,所以能否得到满足要求的Hash完全取决于随机数的取值。矿工要进行海量计算,反复生成随机数并进行“撞大运”的一般尝试,才能得到正确的Hash,从而开采成功。
同时,块头还包含一个动态难度系数。当世界上的硬件计算能力越来越快时,区块链的难度系数也会上升,使得整个网络平均每10分钟就产生一个新块。
朋友们明白我的有多难吗?需要补充的是,不同的区块链应用在细节上是不同的。这里描述的挖掘规则以比特币为例。
比特币的概念最早是由中本聪在2008年提出的,随后根据这一想法设计并发布了开源软件和建立在其上的P2P网络。比特币是一种P2P形式的数字货币。点对点传输意味着一个分散的支付系统。
什么是P2P网络?
传统货币由央行发行,个人储蓄全部由银行管理,是典型的中央集权制。
比特币部署在由遍布全球的许多点对点节点组成的去中心化网络上。每个节点都有资格记录和发行这种数字货币。
至于比特币的底层数据存储,是基于区块链技术的。比特币的每一笔交易都对应块数据中的一行,简单表示如下:
交易记录的每一行都包含时间戳、交易细节和数字签名。
表格只是为了便于理解。存储的实际交易细节是匿名的,只记录付款人和收款人的钱包地址。
关于数字签名,可以理解为每一单交易的防伪标识都是通过非对称加密算法生成的。
接下来,我们来说说比特币矿工的奖励:
比特币协议规定,挖掘新区块的矿工将获得奖励,从2008年开始为50个比特币,之后每4年减半。目前2018年是12.5比特币。所有流通中的新比特币都是这样诞生的,也难怪大家那么渴望开采比特币!
区块链的优势和劣势
区块链的优势:
1.分散
区块链不依赖于一个中心节点,整个系统的数据由全网所有对等节点共同维护,可以存储和检查数据。这样,整个系统就不会被破坏,除非攻击者黑掉了全网一半以上的节点。
2.信息不能被篡改。
块中的数据不能被篡改。一旦数据被篡改哪怕是一点点,整个块对应的hash值也会随之改变,不再是有效的hash值,后面链接的块也会断裂。
区块链的缺点:
1.能源的过度消耗
要生成一个新的块,必须使用大量的服务器资源进行大量不必要的试探性计算,消耗大量的电力。
2.信息的网络延迟
以比特币为例,任何交易数据都需要同步到其他所有节点,同步过程必然会受到网络传输延迟的影响,耗时较长。