区块链概述

区块链技术为比特币系统解决了数字加密货币领域长期以来所必需面对的两个重要问题, 即双重支付问题和拜占庭将军问题。
(关于双重支付问题和拜占庭将军问题看文章后面)
区块链定义和概念

狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
基础架构模型

一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。
在这里插入图片描述
数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;
网络层则包括分布式组网机制、数据传播机制和数据验证机制等;
共识层主要封装网络节点的各类共识算法;
激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;
合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;
应用层则封装了区块链的各种应用场景和案例。
该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。
1、数据层

(1)数据区块
在这里插入图片描述
每个数据区块一般包含区块头(Header) 和区块体(Body) 两部分。 区块头封装了当前版本号(Version)、前一区块地址(Prev-block)、当前区块的目标哈希值(Bits)、当前区块PoW 共识过程的解随机数(Nonce)、Merkle根(Merkle-root) 以及时间戳(Timestamp) 等信息。
区块体则包括当前区块的交易数量以及经过验证的、区块创建过程中生成的所有交易记录。这些记录通过Merkle 树的哈希过程生成唯一的Merkle 根并记入区块头。

(2)链式结构

取得记账权的矿工将当前区块链接到前一区块, 形成最新的区块主链。各个区块依次环环相接, 形成从创世区块到当前区块的一条最长主链, 从而记录了区块链数据的完整历史, 能够提供区块链数据的溯源和定位功能, 任意数据都可以通过此链式结构顺藤摸瓜、追本溯源。
需要说明的是, 如果短时间内有两个矿工同时“挖出” 两个新的区块加以链接的话, 区块主链可能会出现暂时的“分叉”现象, 其解决方法是约定矿工总是选择延长累计工作量证明最大的区块链。

(3)时间戳

区块链技术要求获得记账权的节点必须在当前数据区块头中加盖时间戳, 表明区块数据的写入时间。因此, 主链上各区块是按照时间顺序依次排列的。

(4)哈希函数

区块链通常并不直接保存原始数据或交易记录, 而是保存其哈希函数值, 即将原始数据编码为特定长度的由数字和字母组成的字符串后记入区块链。
哈希函数(也称散列函数) 具有诸多优良特点, 因而特别适合用于存储区块链数据。例如, 通过哈希输出几乎不能反推输入值(单向性), 不同长度输入的哈希过程消耗大约相同的时间(定时性) 且产生固定长度的输出(定长性), 即使输入仅相差一个字节也会产生显著不同的输出值(随机性) 等。

(5)Merkle树

Merkle 树是区块链的重要数据结构, 其作用是快速归纳和校验区块数据的存在性和完整性。
Merkle 树通常包含区块体的底层(交易) 数据库, 区块头的根哈希值(即Merkle 根) 以及所有沿底层区块数据到根哈希的分支。
Merkle 树运算过程一般是将区块体的数据进行分组哈希, 并将生成的新哈希值插入到Merkle 树中, 如此递归直到只剩最后一个根哈希值并记为区块头的Merkle 根。

(6)非对称加密

非对称加密是为满足安全性需求和所有权验证需求而集成到区块链中的加密技术。
非对称加密通常在加密和解密过程中使用两个非对称的密码, 分别称为公钥和私钥。
非对称密钥对具有两个特点, 首先是用其中一个密钥(公钥或私钥) 加密信息后, 只有另一个对应的密钥才能解开; 其次是公钥可向其他人公开、私钥则保密, 其他人无法通过该公钥推算出相应的私钥。
非对称加密技术在区块链的应用场景主要包括信息加密、数字签名和登录认证等, 其中信息加密场景主要是由信息发送者(记为A) 使用接受者(记为B) 的公钥对信息加密后再发送给B, B 利用自己的私钥对信息解密,比特币交易的加密即属于此场景; 数字签名场景则是由发送者A 采用自己的私钥加密信息后发送给B, B 使用A 的公钥对信息解密,从而可确保信息是由A 发送的; 登录认证场景则是由客户端使用私钥加密登录信息后发送给服务器, 后者接收后采用该客户端的公钥解密并认证登录信息。

下图是比特币非对称加密机制
比特币非对称加密机制
2、网络层

网络层封装了区块链系统的组网方式、消息传播协议和数据验证机制等要素。结合实际应用需求,通过设计特定的传播协议和数据验证机制, 可使得区块链系统中每一个节点都能参与区块数据的校验和记账过程, 仅当区块数据通过全网大部分节点验证后, 才能记入区块链。

(1)组网方式
区块链系统的节点一般具有分布式、自治性、开放可自由进出等特性, 因而一般采用对等式网络(Peer-to-peer network, P2P 网络) 来组织散布全球的参与数据验证和记账的节点。
按照节点存储数据量的不同, 可以分为全节点和轻量级节点。前者保存有从创世区块到当前最新区块为止的完整区块链数据, 并通过实时参与区块数据的校验和记账来动态更新主链。全节点的优势在于不依赖任何其他节点而能够独立地实现任意区块数据的校验、查询和更新, 劣势则是维护全节点的空间成本较高。轻量级节点则是保存一部分区块链数据。
(2)数据传播协议

任一区块数据生成后, 将由生成该数据的节点广播到全网其他所有的节点来加以验证。
比特币系统的交易数据传播协议包括如下步骤:
①比特币交易节点将新生成的交易数据向全网所有节点进行广播;
②每个节点都将收集到的交易数据存储到一个区块中;
③每个节点基于自身算力在区块中找到一个具有足够难度的工作量证明;
④当节点找到区块的工作量证明后, 就向全网所有节点广播此区块;
⑤仅当包含在区块中的所有交易都是有效的且之前未存在过的, 其他节点才认同该区块的有效性;
⑥其他节点接受该数据区块, 并在该区块的末尾制造新的区块以延长该链条, 而将被接受区块的随机哈希值视为先于新区块的随机哈希值。
(3)数据验证机制
P2P 网络中的每个节点都时刻监听比特币网络中广播的数据与新区块. 节点接收到邻近节点发来的数据后, 将首先验证该数据的有效性. 如果数据有效, 则按照接收顺序为新数据建立存储池以暂存尚未记入区块的有效数据, 同时继续向邻近节点转发; 如果数据无效, 则立即废弃该数据, 从而保证无效数据不会在区块链网络继续传播。

由网络层设计机理可见, 区块链是典型的分布式大数据技术。全网数据同时存储于去中心化系统的所有节点上, 即使部分节点失效, 只要仍存在一个正常运行的节点, 区块链主链数据就可完全恢复而不会影响后续区块数据的记录与更新。这种高度分散化的区块存储模式与云存储模式的区别在于,后者是基于中心化结构基础上的多重存储和多重数据备份模式, 即“多中心化” 模式;而前者则是完全“去中心化”的存储模式, 具有更高的数据安全性。
3、共识层
早期的比特币区块链采用高度依赖节点算力的工作量证明(Proof of work, PoW) 机制来保证比特币网络分布式记账的一致性。随着区块链技术的发展和各种竞争币的相继涌现, 研究者提出多种不依赖算力而能够达成共识的机制, 例如点点币首创的权益证明(Proof of stake, PoS) 共识和比特股首创的授权股份证明机制(Delegated proof of stake,DPOS) 共识机制等。区块链共识层即封装了这些共识机制。
4、激励层
区块链共识过程通过汇聚大规模共识节点的算力资源来实现共享区块链账本的数据验证和记账工作, 因而其本质上是一种共识节点间的任务众包过程。
以比特币为例, 比特币PoW 共识中的经济激励由新发行比特币奖励和交易流通过程中的手续费两部分组成, 奖励给PoW 共识过程中成功搜索到该区块的随机数并记录该区块的节点。 因此, 只有当各节点通过合作共同构建共享和可信的区块链历史记录、并维护比特币系统的有效性, 其获得的比特币奖励和交易手续费才会有价值。比特币已经形成成熟的挖矿生态圈, 大量配备专业矿机设备的矿工积极参与基于挖矿的PoW 共识过程, 其根本目的就是通过获取比特币奖励并转换为相应法币来实现盈利。
(1)发行机制
比特币系统中每个区块发行比特币的数量是随着时间阶梯性递减的。创世区块起的每个区块将发行50 个比特币奖励给该区块的记账者, 此后每隔约4 年(21 万个区块) 每区块发行比特币的数量降低一半, 依此类推, 一直到比特币的数量稳定在上限2 100 万为止。比特币交易过程中会产生手续费, 目前默认手续费是万分之一个比特币, 这部分费用也会记入区块并奖励给记账者。这两部分费用将会封装在每个区块的第一个交易(称为Coinbase 交易) 中。虽然现在每个区块的总手续费相对于新发行比特币来说规模很小(通常不会超过1个比特币), 但随着未来比特币发行数量的逐步减少甚至停止发行, 手续费将逐渐成为驱动节点共识和记账的主要动力。同时, 手续费还可以防止大量微额交易对比特币网络发起的\粉尘" 攻击, 起到保障安全的作用。
(2)分配机制
比特币系统中, 大量的小算力节点通常会选择加入矿池, 通过相互合作汇集算力来提高“挖”到新区块的概率, 并共享该区块的比特币和手续费奖励。
5、合约层
合约层封装区块链系统的各类脚本代码、算法以及由此生成的更为复杂的智能合约。如果说数据、网络和共识三个层次作为区块链底层“虚拟机”分别承担数据表示、数据传播和数据验证功能的话, 合约层则是建立在区块链虚拟机之上的商业逻辑和算法, 是实现区块链系统灵活编程和操作数据的基础。包括比特币在内的数字加密货币大多采用非图灵完备的简单脚本代码来编程控制交易过程, 这也是智能合约的雏形。
比特币采用一种简单的、基于堆栈的、从左向右处理的脚本语言, 而一个脚本本质上是附着在比特币交易上的一组指令的列表。比特币交易依赖于两类脚本来加以验证, 即锁定脚本和解锁脚本, 二者的不同组合可在比特币交易中衍生出无限数量的控制条件。其中, 锁定脚本是附着在交易输出值上的“障碍”, 规定以后花费这笔交易输出的条件; 解锁脚本则是满足被锁定脚本在一个输出上设定的花费条件的脚本, 同时它将允许输出被消费。举例来说,大多数比特币交易均是采用接受者的公钥加密和私钥解密, 因而其对应的P2PKH (Pay to public keyhash) 标准交易脚本中的锁定脚本即是使用接受者的公钥实现阻止输出功能, 而使用私钥对应的数字签名来加以解锁。
智能合约是区块链的核心构成要素(合约层), 是由事件驱动的、具有状态的、运行在可复制的共享区块链数据账本上的计算机程序, 能够实现主动或被动的处理数据, 接受、储存和发送价值, 以及控制和管理各类链上智能资产等功能。
智能合约作为一种嵌入式程序化合约, 可以内置在任何区块链数据、交易、有形或无形资产上, 形成可编程控制的软件定义的系统、市场和资产。
6、区块链的应用场景
区块链目前的主要应用笼统地归纳为数字货币、数据存储、数据鉴证、金融交易、资产管理和选举投票共六个场景。
7、区块链的现存问题
(1)安全问题
安全性威胁是区块链迄今为止所面临的最重要的问题。其中, 基于PoW 共识过程的区块链主要面临的是51% 攻击问题, 即节点通过掌握全网超过51% 的算力就有能力成功篡改和伪造区块链数据。以比特币为例, 据统计中国大型矿池的算力已占全网总算力的60% 以上, 理论上这些矿池可以通过合作实施51%攻击, 从而实现比特币的双重支付。虽然实际系统中为掌握全网51%算力所需的成本投入远超成功实施攻击后的收益, 但51% 攻击的安全性威胁始终存在。基于PoS 共识过程在一定程度上解决了51% 攻击问题, 但同时也引入了区块分叉时的N@S (Nothing at stake) 攻击问题。研究者已经提出通过构造同时依赖高算力和高内存的PoW共识算法来部分解决51% 攻击问题, 更为安全和有效的共识机制尚有待于更加深入的研究和设计。
区块链的非对称加密机制也将随着数学、密码学和计算技术的发展而变的越来越脆弱。据估计, 以目前天河二号的算力来说, 产生比特币SHA256 哈希算法的一个哈希碰撞大约需要248年, 但随着量子计算机等新计算技术的发展, 未来非对称加密算法具有一定的破解可能性, 这也是区块链技术面临的潜在安全威胁。
区块链的隐私保护也存在安全性风险。区块链系统内各节点并非完全匿名, 而是通过类似电子邮件地址的地址标识(例如比特币公钥地址)来实现数据传输. 虽然地址标识并未直接与真实世界的人物身份相关联, 但区块链数据是完全公开透明的, 随着各类反匿名身份甄别技术的发展, 实现部分重点目标的定位和识别仍是有可能的。
(2)效率问题
区块链效率也是制约其应用的重要因素。首先是区块膨胀问题: 区块链要求系统内每个节点保存一份数据备份, 这对于日益增长的海量数据存储来说是极为困难的。以比特币为例, 完全同步自创世区块至今的区块数据需要约60GB存储空间, 虽然轻量级节点可部分解决此问题, 但适用于更大规模的工业级解决方案仍有待研发。其次是交易效率问题: 比特币区块链目前每秒仅能处理7 笔交易,这极大地限制了区块链在大多数金融系统高频交易场景中的应用(例如VISA 信用卡每秒最多可处理10 000 笔交易);最后是交易确认时间问题: 比特币区块生成时间为10 分钟, 因而交易确认时间一般为10 分钟, 这在一定程度上限制了比特币在小额交易和时间敏感交易中的应用。
(3)资源问题
PoW共识过程高度依赖区块链网络节点贡献的算力, 这些算力主要用于解决SHA256 哈希和随机数搜索, 除此之外并不产生任何实际社会价值, 因而一般意义上认为这些算力资源是被“浪费”掉了,同时被浪费掉的还有大量的电力资源。随着比特币的日益普及和专业挖矿设备的出现, 比特币生态圈已经在资本和设备方面呈现出明显的军备竞赛态势,逐渐成为高耗能的资本密集型行业, 进一步凸显了资源消耗问题的重要性。因此, 如何能有效汇集分布式节点的网络算力来解决实际问题, 是区块链技术需要解决的重要问题。研究者目前已经开始尝试解决此问题, 例如Primecoin (质数币) 要求各节点在共识过程中找到素数的最长链条(坎宁安链和双向双链) 而非无意义的SHA256 哈希值。未来的潜在发展趋势是设计行之有效的交互机制来汇聚和利用分布式共识节点的群体智能, 以辅助解决大规模的实际问题。
(4)博弈问题
区块链网络作为去中心化的分布式系统, 其各节点在交互过程中不可避免地会存在相互竞争与合作的博弈关系, 这在比特币挖矿过程中尤为明显。通常来说, 比特币矿池间可以通过相互合作保持各自稳定的收益。然而, 矿池可以通过称为区块截留攻击(Block withholding attacks) 的方式、通过伪装为对手矿池的矿工、享受对手矿池的收益但不实际贡献完整工作量证明来攻击其他矿池, 从而降低对手矿池的收益。如果矿池相互攻击, 则双方获得的收益均少于不攻击对方的收益。当矿池收益函数满足特定条件时, 这种攻击和竞争将会造成“囚徒困境”。
8、基于区块链的智能合约
智能合约概念最早在1994 年由学者Nick Sz-abo 提出, 最初被定义为一套以数字形式定义的承诺, 包括合约参与方可以在上面执行这些承诺的协议, 其设计初衷是希望通过将智能合约内置到物理实体来创造各种灵活可控的智能资产。由于计算手段的落后和应用场景的缺失, 智能合约并未受到研究者的广泛关注。
智能合约是区块链的核心构成要素(合约层), 是由事件驱动的、具有状态的、运行在可复制的共享区块链数据账本上的计算机程序, 能够实现主动或被动的处理数据, 接受、储存和发送价值, 以及控制和管理各类链上智能资产等功能。
智能合约作为一种嵌入式程序化合约, 可以内置在任何区块链数据、交易、有形或无形资产上, 形成可编程控制的软件定义的系统、市场和资产。
智能合约的运行机理如下
在这里插入图片描述
通常情况下,智能合约经各方签署后, 以程序代码的形式附着在区块链数据(例如一笔比特币交易) 上, 经P2P 网络传播和节点验证后记入区块链的特定区块中。智能合约封装了预定义的若干状态及转换规则、触发合约执行的情景(如到达特定时间或发生特定事件等)、特定情景下的应对行动等。区块链可实时监控智能合约的状态, 并通过核查外部数据源、确认满足特定触发条件后激活并执行合约。

双重支付问题

双重支付问题又称为“双花”问题,即利用货币的数字特性用“同一笔钱”完成两次或者多次支付。在传统的金融和货币体系中,由于金钱货币是物理实体,具有客观唯一存在的属性,所以可以避免双重支付的情况。但在其他的电子货币系统中,则需要可信的第三方管理机构提供保证。区块链技术则在去中心化的系统中不借助任何第三方机构而只通过分布式节点之间的相互验证和共识机制,有效地解决了双重支付问题,在信息传输的同时完成了价值转移。区块链技术通过区块链接形成的时间戳技术加上验证比特币是否满足UTXO(未花费交易)和数字签名,有效避免了双重支付的问题。如果有人用同一笔UTXO构造了两笔付给不同交易方的交易,则比特币客户端只会转发最先被侦听到的那个。矿工会选择将那笔交易包入未来区块,当其中一笔交易所在的区块后有5个链接的区块,这笔交易已经得到了6次确认。在比特币区块链上,6次确认后可以基本上保证比特币不被双花。

拜占庭将军问题

拜占庭将军问题是分布式系统交互过程普遍面临的难题, 即在缺少可信任的中央节点的情况下, 分布式节点如何达成共识和建立互信。区块链通过数字加密技术和分布式共识算法, 实现了在无需信任单个节点的情况下构建一个去中心化的可信任系统。
详情请看添加链接描述

猜你喜欢

转载自blog.csdn.net/weixin_43783865/article/details/84556142