区块链核心技术及其应用演讲脚本
大家晚上好,我是来自大数据中心的潘华引,首先非常感谢大家能够从百忙之中抽出宝贵的时间来听我的介绍。
晚上我分享的题目是《区块链核心技术及应用场景》,主要有以下七个部分的内容,希望通过晚上的分享,能够让大家对区块链的发展历程和底层的数据结构以及主要算法能够有所了解。
准备的时间比较仓促,区块链技术本身也发展很快,有哪里讲得不对的地方请大家多多包涵~
-
发展历史
-
技术概括
-
核心技术
-
架构分析
-
应用场景
-
产业政策
-
总结展望
区块链发展历史
我们首先来看看区块链技术在Gartner历年新兴科技发展历程曲线当中的位置,我看了下近10年,也就是从中本聪的比特币白皮书发布以来历年的曲线,区块链技术是从2016年开始在这个曲线首次出现,而且首次出现就处于过热期的阶段,随后两年徘徊在过热期到幻想破灭期的边缘,今年呢,干脆已经消失了,不过随着越来越多的国家将区块链技术放到比较高的战略位置,特别是中国在中共中央政治局会议上进行了集中学习,希望以后特别是明年,能够进入到复苏期。

下面这张片子展示了区块链技术的主要里程碑节点,从中本聪的比特币白皮书,比特币创世区块、比特币的首个与美元的汇率,到以太坊的上线,以及中国人民银行DCEP项目的启动,到各种巨头参与的区块链联盟的成立,以及Facebook发布的Libra加密货币白皮书,大家有兴趣可以看看小扎在美国国会上面的听证会,他们的野心的很大的,不过我们在这方面的研究和积累也是比较深厚的,DCEP项目启动时间早,而且国内阿里巴巴、腾讯等巨头也很早开始投入,
习主席在中央政治局第十八次集体学习时更是强调把区块链作为核心技术自主创新重要突破口 加快推动区块链技术和产业创新发展。可以说把区块链放到了很高的战略地位。

区块链技术概述
那么我们来看看什么是区块链,狭义地说,区块链是一种分布式账本技术,形式上表现为一种基于哈希密码学和梅克尔树模型的链式数据结构。借助非对称加密、点对点网络、节点共识算法和时间戳等机制,为参与节点提供了一个具有充分可信、不可篡改的、数据透明的分布式账本。
大家请看屏幕右边的这张示意图,所谓分布式账本,就是A君到B君的这一笔转账,整个网络上面的所有人都会将这一笔交易进行记录。广义的讲,区块链还包括在这个分布式账本上面搭建起来的各种商业逻辑。显然,区块链不等于比特币,比特币只是基于区块链技术的一种较为成功的应用,而且也是比特币首次采用了区块链这一独特的数据结构。

随着十年的发展,我们把区块链技术进行了分代,分别为:
-
以比特币为代表的区块链1.0
-
以以太坊为代表的区块链2.0
-
以EOS、DFINITY为代表的区块链3.0
1.0的应用比较单一,就是数字加密货币,以比特币及各种山寨比特币为代表;
2.0在1.0的基础上,提供了图灵完备的通用编程语言,可以实现各种具有复杂逻辑的金融交易,所谓的智能合约,不过不要被合约两个字唬住了,其实和现实当中的合约并不相同,只是计算机能够识别并执行的各种代码而已;
3.0则超越了在金融领域的束缚,试图将区块链技术在其它的垂直领域进行应用,后面将区块链应用场景的时候会再具体展开。

下面再来对区块链技术分分类:
-
以各种数字货币为代表的共有链
-
以Linux基金的超级账本为代表的联盟链
-
最后是各种公司内部的私有链
不同类别的区块链从参与者、共识机制、记账主体、是否需要激励、以及适用的场景等方面都有所不同,片子上面都有,这里就不具体展开了。

分布式记账相比起传统的记账方式有如下特点:
-
账本多点存储,通过P2P网络进行更新
-
将每一笔账都打上时间戳,并采用特殊的节点共识算法,确保账本信息的权威且不可篡改
-
当然,密码学上的非对称加密技术也会被采用,用来确保账本内容和交易的安全性

从交易的流程看,相比起传统账本的记账写入和查账读出,基于区块链的分布式账本要更为复杂。大致需要经过以下五个步骤:
-
交易创建
-
交易传播
-
交易验证
-
网络核实
-
区块更新

区块链核心技术
到现在,相信大家对区块链应该有一个大致的了解,接下来我们再看看区块链当中所采用的一些核心技术。首先,区块链技术更多的是对已有技术的一种集成,然后在使用模式上进行大量创新。比如密码学上的加密哈希函数,虽然在前面套上加密两个字,但是本质上还是一个哈希函数,和大学本科《数据结构》里面的哈希函数一样,不过有更多的独特性质。
-
单向性:对于给定的输入可以简单快捷地得到输出,但是,从输出几乎是无法反推出输入,这个可以从数学上面进行确保,比如幂模运算问题,离散对数问题
-
定时/定长性:定时指的是函数计算时间大致相同,定长指的是函数输出内容长度相同,我们看下面这个例子:以比特币系统当中大量采用的SHA256算法为例,不管输入的是“1”,还是“BlockChain”,输出的摘要长度都是256位,这里的位是二进制,一位只有两个取值,0或者1,这样总共256位,为了便于阅读,片子上面用16进制进行表示
-
抗碰撞性:就是很难找到两个不相同的输入,但是输出是相同的,我们看“BlockChain”和“Blockchian”,虽然只是Chain这个字母大小写不同,但是输出却相差万里
另外,在密码学当中,有个nonce的概念,是一个一次性使用的随机数,通常用来与需要进行加密的数据组合使用,以或得特定的摘要(digest)。

基于加密哈希函数,区块链技术当中大量使用非对称加密技术,就是通常所说的公钥加密,开发和运维的同学一定非常熟悉,我们在远程登录服务器的时候一般会采用这一技术达到安全和免密登录的目的。
与对称加密只有一个密钥不同,非对称加密有一对密钥,一个公钥,一个私钥,公钥由私钥通过加密哈希函数计算产生,即私钥是输入,公钥是输出,显然,无法从公开的公钥反推出私钥。公钥可以公开,但是私钥需要小心保存。
在区块链当中,非对称加密主用在信息加密和数字签名这两个场景有着具体的应用。
-
信息加密:信息发送者 A 使用接收者 B 的公钥对信息加密后再发送给 B,B 用自己的私钥对信息进行解密
-
数字签名:发送者 A 采用自己的私钥加密信息后发送给 B,B 使用 A 的公钥对信息解密,从而可确保信息是由 A 发送的

这张图展示了比特币应用当中的钱包的产生过程。
首先,需要一个随机数,通常会借助操作系统的底层随机数生成器生成一个随机数,为了确保安全,区块链系统当中,可靠的随机源非常重要,因为随机数就是你的私钥,在比特币当中,直接决定着比特币的归属。

我们常说,程序=数据结构+算法,区块链也不例外。
下面先来看看数据结构,需要说明的是,下面提到的数据结构是比特币的数据结构,可能不同的项目,比如以太坊,可能具体的数据域可能有所不同,但是,大体上的哈希链表框架是一样的。
随着时间的推移,从创世区块开始,区块一个一个地增加,除了创世区块,每个区块都有一个哈希指针,指向前一个区块。
单个区块来讲,每个区块主要有两部分数据:区块头和区块数据。
- 区块头:里面主要含有指向前一个区块的哈希指针,时间戳,Nonce加密随机数,当前区块的哈希
- 区块数据:对于比特币来说区块数据就是交易数据,里面是一条条的交易数据

再将当个区块拿出来看,区块头与区块数据之间是通过Merkle树进行联系的。
我们先来看这个Merkle树,不难发现,它其实是一棵二叉树,树是一种数据结构,所谓二叉树就是这棵树除了叶子节点,都有两个子节点。而Merkle树的底下一层是比特币交易数据,每笔交易数据使用加密哈希函数进行取哈希操作,然后每两笔相邻交易的哈希继续取哈希,这样不断重复,直到最后剩下一个根节点,所谓的Merkle Root,就是图中的Hash 12345678. 现实情况下可能有更多笔交易。这样设计的好处是什么呢?

显而易见的一点是:区块头只需要保存Merkle树的根哈希就可以了,而不用去管具体的交易,提高区块链的运行效率和可扩展性,另外一点是充分利用了二叉树这一数据结构的特性,在N个交易组成的区块中确认任一交易的算法复杂度仅为

下面看一个具体比特币区块的结构,这是第100000个区块。
- 区块哈希
- 包含交易数目
- 区块奖励:50个比特币
- Merkle Root
- 时间戳
- 加密随机数Nonce
- 区块大小
- 难度值
- 前后区块的指针
- 详细的交易列表

讲完数据结构,下面来看看区块链当中所采用的共识算法,因为是分布式账本,所以如何才能够达成共识非常重要。
比特币当中所采用的共识算法叫作工作证明,Proof of Work,简称PoW。计算过程如下:
- 步骤1: 搜集当前时间段的全网未确认交易, 并增加一个用于发行新比特币奖励的 Coinbase 交易,形成当前区块的交易集合
- 步骤2: 计算区块体交易集合的 Merkle 根记入区块头, 并填写区块头的其他元数据, 其中随机数 Nonce 置零
- 步骤3: 随机数 Nonce 加 1,采用SHA256算法计算当前区块头的哈希值, 如果小于或等于目标值, 则成功搜索到合适的随机数并获得该区块的记账权; 否则继续步骤 3 直到任一节点搜索到合适的随机数为止
- 步骤4: 如果一定时间内未成功, 则更新时间戳和未确认交易集合、重新计算 Merkle 根后继续搜索
为了确保每十分钟出一个区块,目标值会根据当前网络的算力进行动态调整,具体公式如下:
- 目标值 = 最大目标值(恒定值)/ 难度值
- 难度值 = 上一个区块难度值 *(过去2016个区块的实际花费时长)/ 20160分钟
其中最大目标值为(十六进制):0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

下面看一个两个区块信息的对比来加深对PoW算法的理解。
从时间戳上面可以看出,两个区块被挖出的时间相差将近九年,一个是上个月我做PPT的时候被挖出来的,另外一个是2010年底被挖出来的。
首先从两个区块区块哈希可以看出,目标值越来越小,也就是难度越来越大,这是因为随着这几年比特币价格的节节升高,不断地有人投入挖矿设备,系统内部的算力越来越大。难度的加大,每次计算哈希的次数也大大增加,加密随机数也增加了一个数量级。
还有一个是挖矿的奖励,从50个比特币降低到12.5个比特币。
这是比特币系统本身的设定,大约4年的时间,挖矿奖励减半,直到最后为0,总的比特币个数为:2100万个。

下面再具体看下POW共识算法的共识是如何达成的:
- 步骤1: 客户端发生新的交易,向全网广播要求记账
- 步骤2: 每个记账(矿工)节点收到请求后,将当前时间段内的所有交易以及增加的一个用于发行新比特币奖励的 Coinbase 交易汇总纳入一个新区块
- 步骤3: 每个记账节点开始PoW计算,尝试寻找满足当前网络难度目标要求的nonce随机数
- 步骤4: 当某个记账节点完成了PoW计算以后,就将自己记录的区块向全网广播
- 步骤5: 其它节点通过计算哈希验证该区块PoW计算所找到的nonce随机数满足要求,并验证包含在该区块中的所有交易都是有效且之前未存在过的,认可该区块的有效性,然后继续向邻近节点转发
- 步骤6: 其它节点接受该数据区块,并将其加入本节点账本(链条)的末端,延长区块链
- 步骤7: 客户端等待至少6个区块确认,以避免出现“双花”等问题,交易结束

因为区块大小的限制(1M),以及出块时间的限制(大约十分钟),比特币的交易处理能力低下,并且PoW需要大量哈希计算,这也是它的名字的由来,需要一定的哈希计算工作量。这个过程需要消耗大量电力,目前的统计,比特币每笔交易需要消耗660多度电,比特币整个网络所消耗的电力约占全世界电力消耗的0.33%,与奥地利整个国家的电力消耗接近;以太坊因为10秒钟可以出一个块,单笔交易的电力消耗大约30多度,比比特币的小一个数量级。
为了提高共识达成的效率,就有人提出了PoS算法,权益证明机制,PoS算法依然还是要不断计算哈希,但是,每个人的难度是不一样的,如果你的权益多,且为了取得某次记账权愿意消耗一部分权益,那么你的挖矿难度将会大大降低。
这样那些没有权益或者不愿意花费一定权益的节点就不会去挖矿,白白浪费资源。
目前,点点币是采用了PoS机制,另外以太坊也有这方面的打算,虽然已经这样计划了很久。
从安全性方面来考虑,PoS比起PoW还有这样一个好处:在应对外部攻击的时候,PoS机制的区块链本身是闭环的。怎么理解这个问题呢?我们来分析一下:对于PoW机制,理论上,如果我有足够的计算设备,就可以控制网络上面的算力,就可以为所欲为,跟我是否有对应的区块链中的权益无关,比如比特币;但是,对于PoS机制,要发起攻击,你只有算力是不够的,你还需要有权益,比如点点币,你需要有点点币,而且持有的时间越长越好,那你的点点币哪里来呢?你必须从市场上面去购买,这样币的价格就会升高,你买到的难度就会加大,这里就像股票交易市场一样,当市场上面有大量的人都冲着某一只股票去的时候,那么它的价格就会升高,你买到的难度或者要付出的成本就要增加。

节点共识算法还有很多,包括DPoS,和PBFT等等。DPoS是在PoS的基础之上,选举出一个权益代表委员会,大家轮流记账,产生新区块,那个时候也就不用挖矿了。目前EOS使用的是DPoS机制。
PBFT是在传统BFT算法的基础上面进行的优化,使得算法复杂度从指数级别下降到的程度,在现实当中堪用,通常在联盟链和私有链当中会有所采用,比如Linux基金会的HyperLedger,超级账本。

上述几种算法的主要指标对比如下:
在去中心化、安全性、可用性的“不可能三角”当中,各种算法各有优劣,通常会根据场景综合选择或者组合使用。

在区块链的核心技术当中,最后再来讲讲分叉,fork和对区块链的攻击。
这里强调一点:在区块链当中,最长的链才是合法的链。
在修复Bug或者更新共识机制的时候,区块链会发生分叉。根据最终结果的不同,可以分为hard fork和soft fork。
举个例子,比如关于比特币区块的大小,如果从1M调整为8M,那么更新后的算力会挖出小于等于8M的区块,旧的节点是不会对这些区块进行确认的,旧节点依然挖小于等于1M的区块,当然,如果在新的链当中出现了小于等于1M的区块,新节点也是会进行确认的,但是,旧的链上永远不会出现大于1M的区块,这样,最终一条链变成两条链;如果是将区块大小从1M调整为0.5M,那么不管节点是否升级,大家都是认可0.5M大小的区块的,因此,最终,软分叉最终会导致一条新区块的区块大小都是0.5M的新链。

对分叉有所了解以后,理解共识攻击应该也不难。
对于数字货币,比较难解决的一个问题就是双花问题,就是如何杜绝一块钱花两次。因为理论上,在计算机当中,它只是一份数据,可以无限拷贝。而现实中的现金显然不会遇到这个问题,你的现金花出去了就花出去了,后面就不属于你了,根本没有机会让你花两次。
比特币是这样规定的,其实前面我们已经讲过,只认为最长的链才是合法的。
我们看下面的第一张图,假设Block 1 和Block 1’里面有两笔相同的交易,如果都有效那么就会发生双花,但是比特币只认上面这条更长的链。这是正常的情况,在有人借助算力优势,发动51%攻击,企图对区块链进行篡改的时候,还是可以进行双花的,即便那样会得不偿失。具体过程是这样的:
- 首先,在Block 1进行交易,然后在得到商家的货物以后,马上发起另外一笔交易,这笔交易要花同一笔钱,然后利用算力优势获得记账权并将这笔交易纪录在Block 1’当中,并且以后都在Block 1’后面进行记账,延长这一条链,这样就可以将前面的Block 1的交易作废,达到了双花的目的。

不过,依据目前比特币网络当中的算力,想发动51%攻击的成本巨大,远远高于双花的收益。同时,如果发生攻击也会大大影响比特币的价值。
到这里,终于把区块链的核心数据结构和算法讲完了。
区块链架构分析
从经典的架构层级分析的角度,区块链的架构如下,主要有数据层、网络层、共识层、激励层、合约层和应用层。
数据层主要就是各种数据结构和加密算法,是基础。网络层是区块链网络里面的数据如何传播,比如通过P2P、TCP/IP协议等等,是各种数据交换的基础。网络层之上是共识层,承载各种共识协议。激励层为区块链的可持续运行提供措施,合约层和应用层直接解决现实痛点。

具体到各个现有案例的传统前后端的架构如下:



下面是具体企业的架构设想,大家可以参考,具体了解可以再看看他们发布的白皮书。


区块链应用场景
根据它的特点,区块链典型的应用场景主要具备以下两个条件:
- 注定无法中心化
- 有达成共识的刚需
比如暗网上面的地下交易市场,注定无法使用国家中心化的货币以及当前的全球化的金融体系,同时又有达成交易共识的需求,恰好基于区块链技术的比特币解决了该问题,这也是比特币的价格不断上涨的原因之一。
另外,比如多家企业需要定期进行结算的这么一个场景:当结算发生争议的时候,比如各家的交易纪录不一致,这个时候免不了需要一些第三方的机构介入,耽误时间不说,成本也不小。如果采用了区块链这一分布式账本,则在每一次
记账就自然而然地纪录了相应的交易纪录,且能够做到一致、不可篡改,就能够比较好地解决该问题。

腾讯等大公司其实非常早就在区块链应用方面进行了大量的探索,积极拓展、落地相关场景。

另外,本人是能源背景,在能源领域有着将近10年的工作经验,区块链技术在能源领域也有一些很好的切入点。
首先是碳排放权的认证。
联合国政府间气候变化专门委员会1997年通过《京都议定书》,确立了二氧化碳排放权(简称碳排放权)的认证及其交易机制。顾名思义,碳排放权是对各行业二氧化碳排放的一种 分配和计量方式。政府有关部 门会结合我国碳减排目标 ,根据各行业排放情况,对产生排放的各主体分配一定配额的碳排放权。排放超过配额 的主体要被处以罚款 。多产生的碳排放需要通过额外购买排放权的方式抵消,排放权有余额 的参主体可以将多余部分转移给排放超额的主体,从而获取利润。
电力系统是碳排放的大户,将是碳交易的活跃部门,主要的需求是买入排放权,特别是燃煤发电的企业,煤的主要成分是碳,燃烧以后将会排放大量的二氧化碳。而一些新能源领域的企业,比如太阳能发电、风力发电,甚至电动汽车的制造商,本身的碳排放配额会有富余,可以将排放权卖出去,比如特斯拉依靠碳排放权交易,从2010年开始至今已经收入超过20亿美元。
我国作为负责任的大国,根据《京都议定书》以及《巴黎气候协定》等国际文件的安排,承担了一定的二氧化碳减排要求,也就是说随着时间,我们的碳排放总量在达到一定的峰值以后是要不断减少的,而政府监管部门将会面对碳排放权的配额认证、交易追溯、配额监管等各种痛点,根据目前我们所了解的区块链的一些特性,如果我们用基于区块链技术的分布式账本来构建一个碳排放交易系统,将能够非常好地解决这些痛点。
给每个有碳排放权的企业或者个体分配一个专用ID,相当于公钥,监管部门定期核定并对其碳排放额进行认证,这相当于比特币当中的coinbase,后面不同企业之间的碳排放权的交易可以一笔笔地记录在不可篡改的区块当中。

另外一个能源领域的场景是虚拟发电资源交易系统。考虑到各种分布式电源众多,门类多,容量小,出力间断且随机,需要根据响应结合储能进行集中管理、统一调度,实现不同虚拟发电资源的协同是实现分布式能源消纳的重要途径。
基于区块链技术的虚拟发电资源交易系统可以实现源、荷、储能以及外面需求的信息双向选择和反馈,在资源加入电厂当中的时候根据达成的协议自动生成智能合约,最终打造一个公平可信、公开透明、成本低廉的交易系统。

最后这个是中国人民银行做的数字货币项目,从2014年就开始搞了,目前网上有披露了一些资料,主要实现对M0,即流通中的现金的替代,目前已经有一些城市的部分银行正在试点,相信后续会加快推动。

区块链产业政策
,目前中国在区块链方面的产业政策主要两方面,一个是对打着区块链的名义进行ICO以及对虚拟货币投资炒作的打击,另外一个是对具体合适的场景的产业护持。

区块链总结展望
总的来讲,区块链是具有国家战略意义的新兴技术,新旧动能持续转换的重要动力,几年前是各行各业的“互联网+”,接下去几年可能是大家积极探索“区块链+”的时候。
另外,我个人觉得,“区块链+”可能会像石油、电力、通讯等行业类似,蛋糕很大,但是最终分给谁,可能并不取决于谁家的技术实力,政策以及规则的制定者会有更大的话语权。

参考文献
- Gartner 历年新兴科技趋势图
- blockexplorer
- 比特币白皮书
- 以太坊白皮书
- 2019 腾讯区块链白皮书
- 京东区块链技术实践白皮书(2019)
- 袁勇, 王飞跃. 区块链技术发展现状与展望[J]. 自动化学报, 2016, 42(4): 481-494
- 张亮, 刘百祥, 张如意等. 区块链技术综述[J]. 计算机工程, 2019, 45(5): 1-12
- 张宁, 王毅, 康重庆等. 能源互联网中的区块链技术:研究框架与典型应用初探[J]. 中国电机工程学报, 2016, 36(15): 4011-4022
- Blockchain Technology Overview. NIST. 2018
- https://en.wikipedia.org/wiki/Blockchain
- https://en.wikipedia.org/wiki/Merkle_tree
- https://en.wikipedia.org/wiki/Hashcash
- 2018 年中国区块链产业白皮书
- Andreas M. Antonopoulos, Mastering Bitcoin, 2nd Edition, O•REILLY®, 2017
- 研报 | 初探中国央行数字货币:目标、定位、机制与影响