区块链概述
区块链是什么?
- 分布式数据库
- 分布式数据采集、传输、分析处理
- 分布式账本
- 一种特殊的数据结构
- …
区块链起源于 2009 年由化名“中本聪”的学者发出的白皮书《比特币:一种点对点的电子现金》。文中描述了一个去中心化的分布式系统,用于解决双重支付问题和拜占庭将军问题。
- 双重支付问题:利用电子货币的数字特征达到两次及以上的支付。举个例子,我有 10 元的电子现金,该电子现金以一串唯一的字符串表示。我把这串字符给 A 看,A 知晓了这串字符,代表他收到帐了。但我同时把这串字符串给 B 看了,这就达成了双重支付。若用接收方收到时的时间戳标识,只承认先支付的那笔交易,看起来是解决了,但是现实的网络是存在时延的,在极端情况下仍然有可能造成双重支付。
狭义来讲, 区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构, 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账 (Decentral-ized shared ledger), 能够安全存储简单的、有先后关系的、能在系统内验证的数据.
特点:
- 去中心化
- 时序数据
- 集体维护
- 可编程性
- 安全可信
演化
- 区块链 1.0——数字货币:货币数字化
- 区块链 2.0——智能合约:资产数字化 ——基于区块链的图灵完备的编程脚本语言,适合各种区块链数据结构和共识协议;
- 区块链 3.0——衍生应用:广义资产数字化
上述演化不是递进的,而是平行的。
根据应用场景不同,区块链被进一步分为了:私有链、联盟链、公有链。
- 私有链其实是中心化的
- 联盟链是多中心化的,经过许可认证的节点才能参与到造块的流程中,使用的共识算法可以不用浪费那么多资源
- 公有链是去中心化的,使用的共识算法往往需要算力竞赛,造成算力资源的浪费
基础模型和关键技术

一般说来, 区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成.
- 数据层:数据区块、加密技术、时间戳的封装;
- 网络层:分布式组网机制、数据传播机制、数据验证机制
- 共识层:共识算法
- 激励层:集成经济因素
- 合约层:脚本、程序、算法、智能合约
- 应用层:具体的应用场景
数据层
狭义的区块链就是指的上述模型的数据层。每个分布式节点都可以通过特定的 Hash 算法和 Merkle 树结构,将一段时间内收到的交易数据和代码封装到带有时间戳的数据区块中,并链接到当前最长的主链中,形成最新的区块。
- 数据区块:每个区块都包含一个区块头(Header)和区块体(Body)
- 区块头:封装了该区块的版本号(Version)、前一区块的地址(Pre-block)、当前区块的目标哈希值(Bits)、当前区块 PoW 共识过程的解随机数(Nonce)、Merkle 根(Merkle-root)、时间戳(Timestamp)
- 区块体:该区块的交易数量以及合法的所有的交易记录
最先找到区块的 Nonce 值的矿工节点将获得当前区块的记账权,比特币网络可以动态调整 dificulty 的值,该表 PoW 共识过程的难度,从而达到控制比特币发行量。

取得记账权的矿工会将当前区块链接到前一区块后,形成链条主链;
- 链式结构:理想的情况下,按照上述流程能够形成一条由区块构成的链条。但在极端情况下有可能由两个矿工同时挖出区块,这时链条会出现分叉。解决方案是约定添加区块要添加到工作量证明最大的区块链上;
- 时间戳:每个区块头必须包含一个时间戳,代表的是区块形成时的时间。为区块提供了存在性证明(Proof of existence),为区块链在时间敏感的领域提供了应用空间,比如知识产权注册、公证等领域;
- Hash 函数:Hash 函数的单向性、定时性、定长性、随机性为数据存储在区块链上提供了各种各样的便利,雪崩效应也区块数据起到防篡改的帮助;
- Merkle 树:主要作用是快速归纳和校验数据的存在性和完整性。当某一条交易被篡改或者缺失,这种变动都会通过层层的 Hash 反映到 Merkle-root 中,区块头只要存放 Merkle-root 用于验证即可,增强了区块链的扩展性。另外,树结构使得节点可以在区块没有下载完整的交易数据的情况下,向其他节点索要缺失部分所在子树的 Hash 节点即可,降低了网络开销和验证时间;
- 非对称加密:非对称加密算法主要有:RSA、Elgmal、Rabin、D-H、ECC 等。加密过程中使用了公钥和私钥两个密钥,相互不能推导。用于加密时,使用公钥加密信息发送给私钥持有者,由于其他人持有的是只能加密的公钥无法解密,故保证了信息的机密性;用于签名时,使用私钥进行加密,发送给持有公钥的验证者,由于只有签名者拥有用于加密的私钥,故能验证信息的来源;
下图是比特币使用的非对称加密流程图,其中私钥是通过随机数生成器得到的。

网络层
网络层封装了组网方式、消息传播协议、数据验证机制等要素。需结合实际应用需求,设计适当的传播协议和验证机制,使得系统中每一个节点都能参与到区块的校验和记账过程,仅当大部分节点都通过验证后,区块才可上链。
- 组网方式:
- 数据传播协议:
- 数据验证机制:
共识层
在分布式系统中,如何达成共识是必须要讨论的问题。类似于如何在社会系统中保证民主的同时,实现全社会统一的决策。区块链中的共识层便是封装共识算法的层次。 早期的比特币使用的是基于算力的工作量证明机制(PoW,Proof of work),随着区块链技术的发展,越来越多的共识机制被开发出来,例如点点币首创的权益证明机制(PoS,Proof of service),比特股提出的股份证明机制(DPos,Delegated proof of stake)。
PoW 共识机制
在比特币系统中,各节点 (即矿工) 基于各自的算力,相互竞争来共同解决一个求解复杂但验证容易的 SHA256 数学难题 (即挖矿), 最快解决该难题的节点将获得区块记账权和系统自动生成的比特币奖励。
该数学难题可表述为: 根据当前难度值, 通过搜索求解一个合适的随机数 ( Nonce ) 使得图 3 区块头各元数据的双 SHA256 哈希值小于或等于目标哈希值。通过灵活调整随机数搜索的难度值 ( difficulty ) 来控制区块的平均生成时间为 10 分钟左右。
具体来讲 PoW 共识过程包括如下四个步骤:
- 搜集全网当前尚未确认的交易,增加一个用于发行新比特币的
coinbase交易,形成当前待确认的交易集合区块体; - 计算区块体交易集合的
Merkle根记入区块头,并填写区块头的其他元数据,随机数Nonce记为 0; - 对
Nonce进行累加,并计算区块头整体的双SHA256值,若小于等于目标哈希值则该Nonce为答案,该节点获得记账权,否则继续循环; - 一段时间之后未成功则更新时间戳、交易集合和区块头,继续寻找
Nonce值;
符合要求的区块头哈希值一般有多个前导 0 ,每增加一个前导 0 ,寻找难度就成倍地增加。这是哈希算法的性质使然。目标哈希值的计算是通过使用常数除以 diffculty 值得到的。因此,比特币系统可以通过控制 difficulty 值来控制目标哈希值,从而控制出块概率。
通过算力竞赛支撑的 PoW 最显著的缺陷就是巨大的能源消耗,各个节点为了争夺区块记账权而开展的算力竞赛造成了显著的资源浪费。
PoS 共识机制
PoS 的提出就是为了解决 PoW 的资源浪费问题的。
PoS 使用权益证明替代了 PoW 的工作量证明机制,让系统中拥有最高权益的节点作为记账节点。而权益的体现为:币龄(coin days),即特定数量的货币与其最后一次交易的时间长度的乘积,每次交易,节点都会消耗掉一定的币龄。
和 PoW 的其他不同点:
- 挖矿难度:
- PoW:对于所有节点来说,挖矿难度都是一样的,不同的是算力;
- PoS:挖矿难度和交易输入的币龄成反比,消耗币龄越多则挖矿难度越低;
- 主链判断:
- PoW:拥有最大工作量的链为主链;
- PoS:用于最高币龄消耗的链为主链;
DPoS 共识机制
DPoS 是一种选举机制。过程可以大概描述为:由网络中的股东节点通过投票的方式,选举出前 101 个愿意记账的节点。由这 101 个节点按照定好的时间表轮流对交易打包并签署(生产)一个新区块,且签署之前必须验证前一个区块已经被记账节点签署了。记账节点在这个过程中可以取得一定的收益,但要想成为记账节点需要缴纳相当于一次出块收益 100 倍的保证金。若记账节点错过了自己的时间段,造成交易未签署,股东节点便会将其“投出”。因此为了保证盈利,记账节点需要保证自己高可用性。
与 PoW 和 PoS 不同,DPoS 并非基于某种节点内部的能力或指标进行记账权的赋予,而是由每个节点自由选择的,这种方式能够减少参与交易验证和记账的节点数量,使得共识能快速达成。
其他共识机制
除了上述三种主流的共识机制,还衍生出了许多诸如 PoW + PoS 、行动证明等多个变种机制,各有优劣。PoW 发展成熟,支持者众多。新生的机制虽然环保、安全、高效,但尚未得到广泛的认可。
激励层
区块链本质上是一种共识节点间的任务众包过程,记账节点是为了获得利益而参与到记账的过程中的。因此设计合理的众包激励制度,让记账节点的自利行为能够服务于区块链系统的安全和有效的目标。
比特币通过提供出块节点比特币奖励和手续费为记账节点提供激励,这是大量矿工购买专业设备进行工作量证明帮助比特币网络完成共识过程的动力。矿工可以将获得的比特币奖励通过交易中心换成一定的法币来实现盈利。
激励层主要通过发行机制和分配机制对记账节点进行激励:
- 发行机制:比特币的发行数量是每四年减半的,总额大概在 2100 万,另外每笔交易会产生万分之一比特币的默认手续费,这笔手续费能防止大量微额交易对比特币网络发起“粉尘”攻击。在未来比特币发行数量越来越少的情况下,矿工的激励将由出块奖励为主转变为手续费为主;
- 分配机制:比特币系统中,大量小算力会选择加入矿池形成一个整体节点进行挖矿。出块奖励和手续费将通过一定的分配机制分配给矿池下面的小算力。主流的分配方式有:PPLNS、PROP、PPS。PPLNS 根据最后 N 个节点贡献的实际算力,按比例分配;PPS 根据所有节点的算力(不管有没有实际参与到挖矿中),按比例分配,这种分配方式的矿池常常要收一定的手续费以弥补矿池替偷懒节点承担的风险;PROP 相当于 PPLNS 去掉了最后 N 个节点的限制;
总的来说,矿池的出现让比特币网络面临着安全风险,过于集中的算力可能导致比特币的去中心化优势被颠覆。
合约层
合约层封装区块链系统的各类脚本代码、算法以及由此生成的更为复杂的智能合约.