区块链是一个分布式的公共账簿,包含所有发生在比特币系统中的交易
区块链是一种特殊的分布式数据库,是一串使用密码学方法相关联产生的数据块,每个数据块都包含了一次网络交易信息,用于验证其信息的有效性和生成下一个区块。
分布式数据库就是将数据信息单独放在每台计算机,且存储的信息的一致的,如果有一两台计算机坏掉了,信息也不会丢失,你还可以在其他计算机上查看到。

三人成虎

如果大街上一个人告诉你有只老虎,你不会信,可如果大街上有三个人告诉你,你就可能会相信。
区块链本质上是解决信任问题、降低信任成本的技术方案,目的就是为了去中心化,去信用中介。

⭐比特币

区块链的技术实践。
比特币概述 - 图1
图1-1 比特币概述
如图1-1所示的概述图中,我们可以看到比特币系统由用户(用户通过密钥控制钱包)、交易(每一笔交易都会被广播到整个比特币网络)和矿工(通过竞争计算生成在每个节点达成共识的区块链,区块链是一个分布式的公共权威账簿,包含了比特币网络发生的所有的交易)组成。**

1、把每笔交易在全网广播。让全网承认有效,必须广播给每个节点。
2、矿工节点接收到交易信息后,都要拿出账簿本记载该次交易。
矿工节点是通过电脑运行的比特币软件对交易的进行确认的。
为了鼓励矿工的服务,对于其所记录和确认的交易,系统为矿工提供25个比特币作为奖励。(这个奖励数量,系统设定每4年减半)
3、获得记账权的矿工将向全网广播该笔交易,账簿公开,其他矿工将核对确认这些账目。
交易达到6个确认以上就成功记录在案了。
矿工记录的时候,还会将该笔交易盖上时间戳,形成一个完整时间链。
4、当其它矿工对账簿记录都确认无误后,该记录就确认合法,矿工们就进入了下一轮记账权争夺战。

区块链主要有以下核心内容:

1、去中心化
这是区块链颠覆性特点,不存在任何中心机构和中心服务器,所有交易都发生在每个人电脑或手机上安装的客户端应用程序中。实现点对点直接交互,既节约资源,使交易自主化、简易化,又排除被中心化代理控制的风险。
2、开放性
区块链可以理解为一种公共记账的技术方案,系统是完全开放透明的,账簿对所有人公开,实现数据共享,任何人都可以查账。
3、不可撤销、不可篡改和加密安全性
区块链采取单向哈希算法,每个新产生的区块严格按照时间线形顺序推进,时间的不可逆性、不可撤销导致任何试图入侵篡改区块链内数据信息的行为易被追溯,导致被其他节点的排斥,造假成本极高,从而可以限制相关不法行为。

区块结构

区块包含两个部分:
1、区块头(Head):记录当前区块的元信息
2、区块体(Body):实际数据
包含数据如下图所示:
比特币概述 - 图2
计算Hash值,创建新区块的过程就叫做挖矿

用于进行海量计算的服务器,叫做
矿机**。

操作计算的工作人员,叫做矿工

Merkle Hash

比特币概述 - 图3
Merkle Hash是把一系列数据的哈希根据一个简单算法变成一个汇总的哈希。
假设一个区块有4个交易,我们对每个交易数据做dhash,得到4个哈希值a1a2a3a4

  1. a1 = dhash(tx1)
  2. a2 = dhash(tx2)
  3. a3 = dhash(tx3)
  4. a4 = dhash(tx4)

注意到哈希值也可以看做数据,所以可以把a1a2拼起来,a3a4拼起来,再计算出两个哈希值b1b2

  1. ┌───────────────┐ ┌───────────────┐
  2. b1=dhash(a1+a2)│ b2=dhash(a3+a4)│
  3. └───────────────┘ └───────────────┘
  4. ┌───────┴───────┐ ┌───────┴───────┐
  5. ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
  6. a1=dhash(tx1)│ a2=dhash(tx2)│ a3=dhash(tx3)│ a4=dhash(tx4)│
  7. └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘

最后,把b1b2这两个哈希值拼起来,计算出最终的哈希值,这个哈希就是Merkle Hash:

  1. ┌───────────────────┐
  2. merkle=dhash(b1+b2)│
  3. └───────────────────┘
  4. ┌───────────────┴───────────────┐
  5. ┌───────────────┐ ┌───────────────┐
  6. b1=dhash(a1+a2)│ b2=dhash(a3+a4)│
  7. └───────────────┘ └───────────────┘
  8. ┌───────┴───────┐ ┌───────┴───────┐
  9. ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
  10. a1=dhash(tx1)│ a2=dhash(tx2)│ a3=dhash(tx3)│ a4=dhash(tx4)│
  11. └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘

如果有5个交易,我们可以看到,a5被复制了一份,以便计算出b3,随后b3也被复制了一份,以便计算出c2。总之,在每一层计算中,如果有单数,就把最后一份数据复制,最后一定能计算出Merkle Hash:

  1. ┌─────────┐
  2. merkle
  3. └─────────┘
  4. ┌───────────┴───────────┐
  5. ┌───┐ ┌───┐
  6. c1 c2
  7. └───┘ └───┘
  8. ┌─────┴─────┐ ┌─────┴─────┐
  9. ┌───┐ ┌───┐ ┌───┐
  10. b1 b2 b3 b3
  11. └───┘ └───┘ └───┘
  12. ┌──┴──┐ ┌──┴──┐ ┌──┴──┐
  13. ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐
  14. a1 a2 a3 a4 a5 a5
  15. └───┘ └───┘ └───┘ └───┘ └───┘

从Merkle Hash的计算方法可以得出结论:修改任意一个交易哪怕一个字节,或者交换两个交易的顺序,都会导致Merkle Hash验证失败,也就会导致这个区块本身是无效的,所以,Merkle Hash记录在区块头部,它的作用就是保证交易记录永远无法修改。

Block Hash

区块本身用Block Hash——也就是区块哈希来标识。但是,一个区块自己的区块哈希并没有记录在区块头部,而是通过计算区块头部的哈希得到的:

比特币概述 - 图4
区块头部的Prev Hash记录了上一个区块的Block Hash,这样,可以通过Prev Hash追踪到上一个区块。
由于下一个区块的Prev Hash又会指向当前区块,这样,每个区块的Prev Hash都指向自己的上一个区块,这些区块串起来就形成了区块链。
区块链的第一个区块(又称创世区块)并没有上一个区块,因此,它的Prev Hash被设置为00000000...000
如果一个恶意的攻击者修改了一个区块中的某个交易,那么Merkle Hash验证就不会通过。所以,他只能重新计算Merkle Hash,然后把区块头的Merkle Hash也修改了。这时,我们就会发现,这个区块本身的Block Hash就变了,所以,下一个区块指向它的链接就断掉了。
比特币概述 - 图5
由于比特币区块的哈希必须满足一个难度值,因此,攻击者必须先重新计算这个区块的Block Hash,然后,再把后续所有区块全部重新计算并且伪造出来,才能够修改整个区块链。

小结

比特币代表了数十年的密码学和分布式系统的巅峰之作,这是一个独特而强大的组合,汇集了四个关键的创新点。比特币由这些构成:

  • 一个去中心化的点对点网络(比特币协议)
  • 一个公共的交易账簿(区块链)

    区块链依靠安全的哈希算法保证所有区块数据不可更改; 交易数据依靠Merkle Hash确保无法修改,整个区块依靠Block Hash确保区块无法修改;

  • 一个去中心化的数学的和确定性的货币发行(分布式挖矿)

    工作量证明机制(挖矿)保证修改区块链的难度非常巨大从而无法实现

  • 一个去中心化的交易验证系统(交易脚本)