1、区块链和比特币

  区块链是一种数据存储结构或者协议,能够解决一系列安全、稳定等方面的问题;而比特币是利用区块链技术实现的一种数字货币系统。比特币也是目前唯一一个成熟的区块链应用,这也是二者容易混淆的原因之一。

  区块链起源于比特币,2008年11月1日,一位自称中本聪(Satoshi Nakamoto)的人发表了一篇论文《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)译文,阐述了基于P2P网络技术、加密技术、时间戳技术、区块链技术等的电子现金系统的构架理念,这标志着比特币的诞生。两个月后理论步入实践,2009年1月3日第一个序号为0的创世区块诞生。几天后,2009年1月9日出现序号为1的区块,并与序号为0的创世区块相连接形成了链,标志着区块链的诞生。因此,区块链是伴随着比特币产生的一种新技术。

  通俗地说,比特币是产品,是一种具体的数字货币,而区块链是相对通用的技术。

2、什么是区块链?

区块链是一种新型去中心化协议,能安全地存储比特币交易或其它数据,信息不可伪造和篡改,可以自动执行智能合约,无需任何中心化机构的审核。交易既可以是比特币这样的数字货币,也可以是债权、股权、版权等数字资产,区块链技术解决了拜占庭将军问题,大大降低了现实经济的信任成本与会计成本,重新定义了互联网时代的产权制度。

  区块链(Blockchain)是由节点参与的分布式数据库系统,它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger)。它是比特币的一个重要概念,完整比特币区块链的副本,记录了其代币(token)的每一笔交易。通过这些信息,我们可以找到每一个地址,在历史上任何一点所拥有的价值。

  区块链是由一串使用密码学方法产生的数据块组成的,每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接到当前区块,形成块链。每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希值是未知的。 这些特征使得比特币有效解决了双重支付(double-spending)的问题。

3、区块的基本结构

  区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易组成。区块头是80字节,而平均每个交易至少是250字节,而且平均每个区块至少包含超过500个交易。因此,一个包含所有交易的完整区块比区块头的1000倍还要大。

字段

大小

描述

区块大小

4字节

用字节表示的该字段之后的区块大小

区块头

80字节

组成区块头的几个字段

交易计数器

1-9可变调整字节

交易的数量

交易

可变的

记录在区块里的交易信息

  区块头:区块头由三组区块元数据组成。

首先是一组引用父区块哈希值的数据,这组元数据用于将该区块与区块链中前一区块相连接。

第二组元数据,即难度、时间戳和nonce,与挖矿竞争相关 。

第三组元数据是merkle树根(一种用来有效地总结区块中所有交易的数据结构)。

  区块头结构

字段

大小

描述

版本

4字节

版本号,用于跟踪软件/协议的更新

父区块哈希值

32字节

引用区块链中父区块的哈希值

Merkle根

32字节

该区块中交易的merkle树根的哈希值

时间戳

4字节

该区块产生的近似时间(精确到秒的Unix时间戳)

难度目标

4字节

该区块工作量证明算法的难度目标

Nonce

4字节

用于工作量证明算法的计数器

  Nonce、难度目标和时间戳会用于挖矿过程。

  创世区块

  比特币区块链的第一个区块,创建于2009年,我们称之为创世区块。它是比特币区块链里所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。

  每一个节点都“知道”创世区块的哈希值、结构、被创建的时间和里面的一个交易。因此,每个节点都把该区块作为区块链的首区块,从而构建了一个安全的、可信的区块链的根。

  创世区块的哈希值为:

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

   区块示例

  以比特币区块链623570深度区块为例,

区块链解读_区块链技术

区块链解读_区块链技术_02

   其中,一些主要字段信息含义如下:

  • Hash:此区块的Hash签名,唯一且不可更改;
  • Timestamp:时间戳;
  • Number of Transactions:此区块中所包含的交易数量,网页下方显示了2593个交易的详细信息,也称为区块体;
  • Difficulty:难度系数,为了控制区块产生的速度,难度系数代表当前区块产生的难度;
  • Merkle Root:默克尔树根,默克尔树是存储交易签名的数据结构,在Git中也有应用;
  • Version:区块链的版本;
  • Nonce:工作量,在当前难度系数下计算了478,347,654次才生成了此区块

   这些关键字段的正确维护是区块链实现的基础,也是区块链去中心化,解决双花(double-spending)和拜占庭将军问题的基本结构。有了关键的数据结构,还需要相辅相成的规则和算法才能运行起来。理清楚整个流程之后再回过头看区块结构就能一目了然了。

区块链解读_区块链技术_03

 由此可见,

  • 一个区块写入后Hash唯一且不可更改,除非把整个区块链中所有区块的Hash,Previous Block,Next Block(s)全部做相应更改。
  • 一个区块的内容更改后Hash随之更改。

 4、去中心化与点对点网络

  去中心化是区块链的核心思想,这也是与其他分布式产品的最大区别,去中心化保证了公平性和安全性。点对点网络就是在去中心化的框架下的互联网,类比现实社会,当今的社会制度就是中心化的,国家的中心是政府,金融系统的中心是央行。假如政府腐败、央行作弊,那么整个社会就无公平可言,所有的数据也是不可信任的。也许去中心化也是人类社会制度发展的终极目标。只要拥有一台电脑就能加入点对点网络成为一个节点,每个节点都能拥有整个区块链的信息(目前达到了上百GB),而且在不断的更新和同步。每一个区块的写入都会广播到整个网络。点对点网络中每个点拥有相同的权利和义务,都是对等的,以CPU作为算力单位每个点都可以参与投票、计算和打包数据,也拥有同步区块信息的权利。

5、共识机制

  共识机制是区块链中最重要的特点,共识是指对区块数据的认同,也可以看做是投票。只有点对点网络中半数以上的都认为区块数据是真实可靠的才能达成共识。目前有几种主要的共识机制:工作量证明(PoW)、权益证明机制(PoS)、授权股权证明机制(DPOS)和拜占庭共识算法(PBFT)。其中工作量证明是比特币采用的机制。在比特币中工作量证明就是所谓的“挖矿”。

  由于每个节点都要去同步最新的区块链数据,所以区块产生的速度不能太快,不然大部分节点根本来不及同步。中本聪为此设计了难度系数调节机制,在区块结构中维护了Nonce和Difficulty两个字段,分别代表计算的次数和难度系数,区块产生设计速度是每10min产生一个,随着算力的提高,这个速度可能会加快,如果区块的产生速度大于设计速度那么下一个区块的难度系数就会增加。因此可以保证区块的产生时间间隔围绕在10min左右。所以在比特币中随着时间推移挖矿会越来越难。

6、区块链分叉

   如果有两个区块同时加入区块链,那么区块链就会分叉。哪一个分支长度更长就会把哪一个当做主干,确认交易,另一个分支就会被抛弃(选中大多数节点的共识)。因此确认一次交易的时间要1个小时左右。

区块链解读_区块链_04

   诚实矿工只创建最长有效链上的最新区块。当包括在链中的所有区块以及交易都有效,且是从创世区块开始的链,才是被我们承认的有效区块链。

  对于区块链中的任意一个区块,到达创世块的路径只有一条。然而,从创世块开始,会有分叉的情况出现。当创建两个区块的时间差只有几秒时,经常会创建出一个分叉区块。当发生这种情况时,节点就会在他们最先接收到的那个区块上创建区块。无论哪一个区块包含在下一个区块中,它都会成为主链的一部分,因为这条链更长。

  短链(无效链)中的区块没有什么作用。当比特币客户端切换至另外一条更长的区块链时,短链中的所有有效交易区块都重新添加到序列交易池中,且会包含在下一个区块中。短链中的区块奖励不会呈现在最长的区块链中,因此实际上他们是有损失的,这就是为什么需要网络强制的100个区块的成熟时间来让产生存在。

  在短链中的区块,我们通常称之为“孤儿块”(orphans)。这是因为,在长链中这个生成交易并没有父系区块,因为这些生成交易在交易PRC列表中显示为孤儿。一些矿池误解这些信息,声称他们的区块是”孤儿“。事实上,这些区块都有父系区块,而且甚至可能有子系。

7、双重花费和拜占庭将军问题

  双重花费是指把同一笔资产花费到两个不同的交易中,例如,节点A一共有1个比特币,节点A几乎同时提交了两个交易:向节点B支付1个比特币,向节点C支付一个比特币。在交易记录之前这两笔交易可能都是合法的,可能会有不同的节点将其记录到区块中,如果同时产生了两个区块,那么就按照工作量证明的共识机制来选择。区块链不通过第三方也可以解决双花问题。

拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商,从而赢取战斗?这就是著名的拜占庭将军问题。

  拜占庭将军问题在区块链中的描述应该是,在不知道具体的诚实节点的情况下怎么能够达到共识,在区块链中使用主流的共识机制(工作量证明(PoW)、权益证明机制(PoS)、授权股权证明机制(DPOS)和拜占庭共识算法(PBFT))就可以解决拜占庭将军问题。

8、隐私保护

由于在区块链中,所有节点都由全网唯一的SHA256签名代表,这个签名也不能被反向推出信息,因此即使签名在全网广播也不能得到某个节点的信息。基于这一点在所有交易中节点都相当于是匿名的,很好的保护了用户的隐私。但这也是编写勒索软件的黑客们常用的勒索支付方式。

 

参考资料

  1. 一个故事告诉你比特币的原理及运作机制
  2. 比特币白皮书:一种点对点的电子现金系统
  3. 区块链是什么?
  4. 从现实角度解读区块链