区块链技术概述

区块链,这个概念最早出现于2008年10月31日(北美东部时间)署名“中本聪”的作者发表的比特币系统技术白皮书《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System),在该白皮书中首次提出区块链是一种用于记录交易账本的数据结构。

2019年10月25日,习近平在中央政治局第十八次集体学习时强调把区块链作为核心技术自主创新重要突破口,加快推动区块链技术和产业创新发展。

区块链技术背景

(1)随着人类处理大数据的数量、质量和速度的能力不断增强,推动人类经济形态由工业经济向数字经济形态转化,数字技术被广泛使用并由此带来了整个经济环境和经济活动的根本变化。
(2)企业、消费者和政府之间通过网络进行的交易迅速增长,必须极大地降低社会交易成本,提高资源优化配置效率,才能提高产品、企业、产业附加值,推动社会生产力快速发展。
(3)人类社会交易是个体或组织的价值创造、价值交换与价值记录的过程。在这个过程中,所有环节的“可信”是有效社会交易活动的前提与基础,信任是确保人类社会交易甚至生产关系得以维系发展的核心要素。

根据信任主体之间的关系,可以把信任服务模式划分为无中介熟人信任、第三方信任和去中介陌生信任等3种类型。

信任服务模式 信任主体关系 信任建立代价 信任范围
无中介熟人信任 熟人关系 高 极有限
有中介第三方信任 陌生人关系 中/高 国家/国际
基于软件算法与机器系统的无中介陌生人信任? 陌生人关系 低/低 国家/国际

区块链作为一种创新的只依赖于软件算法与机器系统的无中介陌生人信任服务体系进入了学术界和产业界的视野。

纸币:纸币的发行、印制、回笼和贮藏等环节成本较高,流通体系层级多,且携带不便、易被伪造、匿名不可控。
电子货币:具有管理和监管上的便利,但系统安全性仍然存在很大挑战,诸如伪造、信用卡诈骗、盗刷、转账骗局等安全事件屡见不鲜。

从20世纪80年代开始,研究人员一直在探索设计实现一种新型数字货币,保持既有货币方便易用的特性,同时消除纸币和电子货币在使用上的缺陷。

目前普遍认为区块链技术最早起源于比特币Bitcoin开源项目。

信任服务模式 信任依据 规模与范围 成本代价 影响因素
实体第三方信任 依据第三方中介的可信度 规模与范围较大 高 受到少数人影响
中心化网络第三方信任 依据中心化网络第三方平台的可信度 规模与范围大 极高 受到关键少数人影响
区块链信任 依据区块链的算法、共识机制 规模与范围大 很低 几乎不受人为因素的影响

区块链的基本概念

在数据结构中,链是由多个节点(Node)相互连接构成的一种最基本的数据结构。
区块链从字面上理解就是由多个记录数据的区块构成的链式数据结构。

在区块链系统的所有区块中,第一个区块被称为创世区块。每个区块中存储了一定数量的交易数据,都由交易发起人的数字签名来保证其真实性和合法性,从第二个区块开始,每个区块都保存了前一个区块(父区块)的区块头的哈希值,区块之间首尾相互连接就构成链式结构,因而先前区块里的任何数据都不可被篡改。

◆区块链的特点
(1)去/弱中心化(区块链最突出最本质的特点)。
(2)数据不可篡改。
(3)数字价值唯一性。

去/弱中心化:区块链不依赖中心化或第三方管理机构及硬件设施,去除或弱化中心管理,通过P2P网络构建分布式的结构体系和开源协议,让所有的节点都参与数据的记录和验证,再通过分布式传播发送给各个节点,即使部分节点受到攻击或者发生故障,也不会影响整个分布式账本数据的一致性和完整性,各个节点实现了信息自我验证、传递和管理。

数据不可篡改:信息一旦经过验证并添加到区块链,就会被永久地存储起来,在系统任何节点上对数据的修改都是无效的,除非有人能同时控制超过半数以上的系统节点,但是区块链系统的节点是由多方公共维护的,要控制超过半数以上的节点,需要付出的代价可能远远大于篡改数据获得的收益。因此,区块链技术从根本上改变了中心化的信用创建方式,通过数学算法与博弈论原理而非中心化信用机构来低成本地建立信用,比特币、以太坊等系统已充分证明了区块链的这一特点。

数字价值唯一性:在信息世界中,最基本单元是比特(bit),数字比特序列是可复制,但是数字价值不能被复制,数字价值必须是唯一的,这本身就是矛盾的。在区块链技术出现之前,要让一个文件在全世界范围内是唯一的,需要花费巨大的代价。区块链采用共识机制和密码学方法,以很小的代价实现数字化表达唯一性,真正使数字价值变得唯一,可以模拟真实世界中的实物唯一性。

◆区块链的类型

类型 节点归属 节点加入方式 共识范围 数据公开范围 应用范围
公有链 任意陌生主体 自由加入 所有节点 完全公开 公众
联盟链 联盟成员主体 联盟成员自由加入 联盟通道节点 联盟范围内 联盟范围内/公众
私有链 单一主体 受控加入 单一主体节点 不公开 单一主体内部
  • 公有链中的“公有”就是任何人都可以参与区块链数据的维护和读取,数据完全开放透明。
  • 联盟链即区块链共识建立的范围及公共账本的公开对象为有限主体,如行业联盟成员之间,联盟成员平等参与区块链网络构建、公共账本创建与维护。
  • 私有链与公有链是相对的概念,所谓私有就是指不对外开放,仅仅在组织内部使用。私有链即区块链共识建立的范围及公共账本的公开对象为单一主体,单一主体对区块链的网络运行及数据处理、交换与存储具有全部权利。

◆区块链的发展历程
(1)第一阶段称为区块链1.0阶段,是以区块链为基础的去中心化的加密货币技术实现为代表;
(2)第二阶段称为区块链2.0阶段,是以区块链为基础的去中心化的智能合约交易处理技术实现为代表;
(3)第三阶段称为区块链3.0阶段,是以区块链分布式账本处理技术为基础的广泛的区块链应用实现为代表。

阶段 核心功能 共识机制 区块链类型 性能 实现语言
区块链1.0 加密货币 PoW 公有链 低 简单脚本语言
区块链2.0 智能合约 PoW/PoS 公有链 一般 专用语言
区块链3.0 数字价值交换应用平台 PBFT/Raft多种机制 公有链、联盟链、私有链 较高可扩展 高级编程语言

区块链3.0阶段的标志就是区块链技术开始向社会经济各个领域应用延申,人们逐渐意识到,区块链不仅是一种技术,更是一种代表公正透明、协作信任的模式,区块链思想与技术可以有效应用在政企管理、社会治理、供应链、物联网、权属管理、医疗健康等诸多领域,成为面向社会全行业的应用。区块链3.0阶段,超级账本 HyperLedger 项目作为典型代表,是区块链技术中第一个面向企业级应用场景的开源分布式账本平台,可以运行以标准通用编程语言编写的分布式应用程序,使更多基于区块链的联盟链、私有链应用得以实现。

◆区块链系统体系结构
区块链作为一种分布式计算软件系统,在体系结构上没有采用传统具有中心化服务器节点的C/S或B/S架构,而是采用无中心化节点的P2P体系结构。
在区块链系统中,每个存储区块链与账本数据的网络节点都是对等关系,节点之间会共享区块链与账本数据,无论新区块从哪个节点生成,都会通过特定的P2P网络协议以广播的形式向其它节点进行传播,所有节点对区块进行验证后,新区块才能被添加到链上。

◆区块链系统逻辑架构
区块链系统自下而上可以分为存储层、数据层、网络层、共识层、激励层(可选)、合约层、接口层、应用层。

比特币

概述

比特币系统的节点可以细分为“全节点”、“轻节点”等两大类,其中发挥核心作用的是全节点。
(1) 全节点是比特币系统中功能最完整的节点,全节点一般要求保持一直在线。
(2) 轻节点主要负责提供交易和钱包功能,不参与出块权的竞争计算,不会存储完整的区块链,只需要保存每个区块的区块头信息。

◆比特币系统逻辑架构
(1)存储层:比特币用LevelDB做链上数据的持久化底层,它是典型的NoSQL键值存储,专为高性能写入与有序键值场景设计,正是比特币 UTXO 与区块索引的核心载体。
(2)数据层:对比特币系统核心的区块、区块链、交易、账本、地址等关键数据结构进行定义和处理,负责将交易打包进区块,由区块组成区块链,采用特殊的UTXO模型构建账本数据,并基于底层的存储服务提供对比特币区块链数据的安全读写访问管理。
(3)网络层:主要采用非结构化P2P网络,基于Gossip数据分发协议,实现网络节点快速发现与连接,以及区块、交易数据的分发与同步。
(4)共识层:采用PoW工作量证明共识机制,让所有的比特币网络节点都认可每次计算产生的新区块,并且协调保证所有比特币网络节点数据记录一致性,使比特币系统的整体状态达成一致。
(5)激励层:比特币系统的激励层在共识层的功能基础上,提供了总量有限的比特币发行和出块激励机制,对于加入比特币网络的节点,都能公平地通过参与PoW工作量证明竞争计算,都有一定机率被区块链系统增发奖励一定数量的比特币。
(6)合约层:比特币系统的合约层没有提供真正意义的智能合约功能,而是基于一种非图灵完备的、基于逆波兰表示法的Script脚本语言开发技术,提供交易相关锁定脚本/解锁脚本的定制。
(7)接口层: 比特币系统的接口层提供了基于JSON RPC的SDK接口bitcoin-cli命令行接口。
(8)应用层:基于接口层提供的SDK接口,可以基于比特币区块链实现面向电子支付等多种应用场景和业务逻辑的公有链应用。

数据层

ACID:原子性、一致性、隔离性、持久性

◆账户地址
在比特币系统中没有直接的“账户”概念,而是用账户地址来代表用户的账户,相当于银行卡卡号,任何人都可以通过你的账户地址给你转账比特币。

◆账本数据类型
比特币系统账本没有采用传统的“账户/余额”模型,而是提出了一种独特的UTXO未消费的交易输出模型,简称比特币UTXO模型。UTXO是一个包含交易数据和对应的执行代码的数据结构,所有的UTXO条目构成了比特币系统的“账本”。 UTXO模型的本质是通过交易记录来构成系统账本,而不是通过账户信息构成账本。
在比特币的每一笔支付交易中,都有“交易输入”(标识资金来源)和“交易输出”(标识资金去向),且每个交易都可以有多个交易输入和多个交易输出,交易之间按照时间戳的先后顺序排列,且任何一个交易中的交易输入都是其前序的某个交易中产生的“交易输出”,而所有交易的最初的交易输入都来自比特币系统节点生成区块得到的激励(比特币)。

交易A无交易输入,没有对应的”父交易“的交易输出,称为“Coinbase交易”,表示来源为节点生成区块的激励(比特币唯一生成方式),且仅有一个交易输出,对应着接受该区块激励的节点X的地址。

1 比特币 = 1亿聪

在比特币系统中,交易表示一次价值转移操作,会导致账本状态的改变。链是由一个个区块按照发生时间顺序串联而成,可以看作是整个区块链状态变化的日志记录。


在一个比特币区块的区块头中包含了Merkle树根的哈希值,在区块体中包含了所有经过验证的交易数据。区块体中所有交易数据的哈希值构成了一棵Merkle树,每个叶子节点是每个交易信息的哈希值,将该Merkle树的根节点的值,称根哈希或主哈希,存入区块头。

网络层:P2P网络与节点

比特币系统采用的P2P网络属于非结构化P2P网络,不存在中心服务器,比特币网络中存在“全节点”、“轻节点”等不同类型的节点。

比特币系统的P2P网络基于TCP协议构建,比特币系统的P2P网络主要采用了Gossip协议来实现节点发现、节点连接、区块广播、交易广播等功能。

传统的Gossip协议数据分发的算法如下:
(1) 节点X维护更新邻近的节点信息列表;
(2) 节点X定时向邻近的节点发送自身存储的数据;
(3) 节点Y接收到节点X发送的数据后,如果其中存在节点Y中没有的数据,则对数据进行本地存储,并且重复上述(1)、(2)步骤。

◆节点发现管理

比特币是无中心服务器的 P2P 网络,不存在一个统一 “总入口”。新节点刚开机,本地是空的,不知道全球任何在线全节点的 IP 地址,没法直接连上网络。所以必须有方案帮它找到至少一个活着的在线节点,连上之后才能同步区块链、收发交易、参与 Gossip 广播。
在比特币网络中,一个新启动的节点可以通过利用DNS种子节点和节点引荐两种方式发现其它网络节点。