首页 > 区块链 > 正文

【首届中国区块链应用论坛】蔡维德:区块链的核心技术及发展趋势

2016-11-24 09:48:03  来源:CIO时代网

摘要:北京航空航天大学数字社会和区块链实验室主任蔡维德在活动上发表了题为《区块链的核心技术及发展趋势》的主题演讲。
关键词: 区块链
  区块链作为一种新型的技术组合,其分布式、不可篡改、不可抵赖等特点带来了一种全新的信用模式,正在引起各领域对未来应用前景的无限憧憬。2016年11月13日,由CIO时代学院、中国新一代IT产业推进联盟主办,CIO时代网承办的“首届中国区块链应用论坛”在北大中关新园成功举行。本次活动的主题为:区块链技术及应用前景。本次活动吸引了众多专家、金融及互联网行业代表、各届CIO班学员们等近两百名业界人士的关注和参加。北京航空航天大学数字社会和区块链实验室主任蔡维德在活动上发表了题为《区块链的核心技术及发展趋势》的主题演讲。以下为演讲实录:
 
\
  各位领导、各位专家,早上好!今天我跟大家分享区块链一些新的发展,主要讲的偏于技术。这是我在北大CIO讲的第四次了,越讲越技术。
 
  区块链技术简介
 
  首先讲一下什么叫区块链?区块链是难以篡改、可追溯的分布式帐本。区块链看起来很简单,其实很难。有人说他两天就可以做一个区块链,但是如果把区块链拿来做应用的话,特别是把它提升成有用的应用,却是一件非常难的事情。区块链核心代码只有几千行,却可以使十几个人工作一年,还是无法解决很多技术问题。
 
  区块链的定义:块子链、多独立拷贝,拜占庭容错协议。注意一下P2P网络不在里面。
 
  区块链还分有公有链和许可链。公有链和许可链的技术、需求、架构差异非常大。公有链的问题常常不是许可链的问题。所以如果大家不看清楚会被混淆视听,把公有链的问题当成许可链的问题。左边是公有链的挖矿机,右边是许可链所用的服务器,差异非常大。
 
  三代区块链
 
\
  区块链还分三代,我从2016年三月一直讲到现在,可是感觉还有一些东西没有讲清楚。第一代区块链, 比特币是代表。比特币是数字货币应用而不是平台,公有链 (全网记帐),是一个公开帐本,虽然有加密,但是帐本是全公开的。帐本不完整,因为只记录历史信息,账户余额不记载。账户只能用一次,用P2P网络逃避监管,所以速度极慢,而且扩展性基本不行。
 
  第二代区块链,以太坊是代表。Vitalik (以太坊创始人)发现比特币有很多问题,所以他做了几个很大的贡献: 1) 把以太坊转型变成一个平台,而不只是一个数字货币应用。2) 以太坊有完整的帐本。这在区块链上面是一个很大的进步。3) 在以太坊平台上加上“链上代码”,俗称“智能合约”。但现在连他自己也承认,智能合约第一不智能,第二不是合约。所以“智能合约”这名词就变成了一种误导,应该称之为“链上代码”,“链上代码”就把数字货币应用变成了很意思的平台。所以以太坊是在比特币上面有非常大的进步,但是以太坊又局限于ICO (initial coin offering),他想发币一下子成为百万富翁,所以他局限于公有链上面。所以以太坊速度很慢而且扩展性很难。Vitalik出的白皮书已经说了两年以太坊能扩展, 可是到今天还是做不出来,因为以太坊的架构(公有链)的限制。 2015年就有人说,以太坊扩展性可能是一辈子都做不出来的问题。是但到底是不是一辈子做不出来的问题? 起码非常难。
 
  第三代区块链, 北航链是代表。北航链不是一个应用,基本上是一个平台,系统,许可链 (只有被许可的节点可以记账)。北航链有一个隐私的完整的帐本,帐本是不公开的,是用系统工程发展的区块链。
 
  我在11月5号在昆明演讲,都是中国软件工程教授在下面听。如果以软件工程来看比特币跟以太坊,它们违背了软件工程的原则:
 
  比特币机器加的越多,速度越慢。这是共识的机制的结果?一个平台,机器一直加进去,速度却会越来越慢,这根本就是违背软件工程的原则!一个平台加机器,速度越快,才是正常。
 
  区块链常常是个万能链,所有东西都在一条链上,这是违背软件工程的原则!软件工程说一个软件(一条链)只做一件事。
 
  如果我们是个软件工程师、系统工程师,该怎么样设计一个区块链? 如此这样就开拓了很多思想,所以是用工程方式设立一个平台,这个平台可以让大家二次开发,而且是快速的开发,变成一个有用的应用。所以第三代区块链速度快、扩展性强,成为一个特性。
 
  区块链是开启一个新的软件、数据库、云技术
 
  我在2016年7月21号在北京演讲时提出这个概念。这个新的软件工程是因为我在今年3月开始为中国中央电视台 (CCTV)设计一个大型的应用发现的。当时我设计应用时就发现有许多问题是以前从来没有碰到过,因为第一我有高速的区块链,第二中央电视台有很多系统上的需求,而这种系统上的需求是以前教科书都没有碰到的,所以我就发觉需要一个新的软件工程。
 
  有人说区块链是分布式数据库,可是它的分布式数据库又跟传统分布式数据库不一样,有人说区块链是云,但是区块链云跟普通云又不一样,所以区块链技术是一种新的学科出现:一个新的软件工程、新的软件技术,新的数据库技术、新的云技术。
 
  “双链架构”解决“全能一条链”的问题
 
\
 
  2015年初,欧洲银行联盟提出的一个区块链方案“万能一条链”,就是把所有的金融机构都连在一条链上面,链上作交易清算结算, 收到很多注意。 上面的图是日本在今年3月发表的万能一条链的实验。在万能一条链上面,需要极大的计算力。我今年9月的时候在北京演讲,做了一个计算,如果是只有150个机构,几亿个账户,每一秒要达到上交所的速度,每一个节点需要100台的天河计算机才能做到。150个节点,每个结点都要100个天河计算机,那就是1万5千台天河,这是极大的计算力!这事实上是不可能的。首先天河是非常贵的,而且消耗能量是非常大的。另外,在万能一条链上,隐私也没有保障,每一个节点都可以看到别的节点上所有的账户。
 
  所以2016年3月我在英国牛津发表一篇文章 (“A System View of Financial Blockchains”),把一个万能一条链变成账户链 (ABC)以及交易链 (TBC),当我们把账户链和交易链分开的时候,账户链就可以做很多优化,交易链也可以做很多优化,隐私也可以有保障。另外这样可以节省大量计算能力,不需要用天河计算机,用普通的服务器就可以,这就是我们发明的双链架构。
 
  负载均衡的区块链云
 
  另外把这万能一条链变成ABC或TBC之后,又可以变成一种可以负载均衡,可以分(并行计算),又可以合(串行计算),这就是“区块链云”的概念。而区块链云跟传统的云概念不一样,传统云是一个计算中心,大数据,计算可以“分”,可以“合”,这是负载均衡 (load balancing)的机制。 但是传统区块链是不能分, 不能合, 不能负载均衡的。
 
  但是有ABC和 TBC后,区块链可以分, 可以合, 可以有扩展性。只要加服务器, 区块链速度就能增快。例如说一个链一秒跑一万次,那么两套就可以一秒跑两万次,三套就可以跑三万次,四套就变四万次。这样的话区块链的速度的问题就可以解决,用扩展性来解决。这是我们的发明。
 
  CCTV (中央电视台)微电影系统设计上的实际问题
 
  我在做CCTV微电影的平台时候就发掘,需要有一种新软件工程方法。
 
  我在2015年演讲时说,我说区块链可能几十个节点就够了,结果有些人说,绝对不够,要很多(》 1000)节点才可以。等我真正做系统的时候,我问需要多少节点,说“越少越好”。因为每个节点很贵啊!
 
  所以在乌托邦的时候,我们要伟大的理想,说区块链要有几千个节点。等到2016年真正做区块链的时候, 却是越少越好, 因为要省钱不要乌托邦!
 
  但是省钱,安全性就会损。所以说安全、性能、费用,用户的感受,支付、制定性,这些都会影响到区块链的设计。
 
  区块链设计就受这些事情的影响而不止在于做支付,而且很快的这件事情是说什么数据放在区块链上,
 
  有人说所有数据都要放在区块链上。真的吗?那是非常贵的!
 
  那么所有应用是不是都放在区块链上 (链上待码)?真的吗?那是非常贵的!
 
  在区块链上面的应用是非常贵的。事情在我们讲或者听的时候很容易,但是真正做的时候会遇到很多的困难、必须做很多的决定。而且有些是受外界限制,有些受系统控制,有些是受软件控制。乌托邦的系统在现实是不存在的。
 
  那么说需要几条链,如果不是万能一条链的话,那就可以是很多链?当时设计时有个团队要五个链,我打电话说必须减到三条链,他们抗议。给我讲一大堆理由,我说一条链可能要300万,五个链就要1500万,有1500万吗?如果有就做五条。我当时算的是一条链300万,当然现在会有变化。我们没有这么大金费,所以从5条链变3条链。
 
  有人说我们设计要像关系数据库一样,一个表一个链,真的吗?真的是疯狂了!30 到50 链?这是不可能的。
 
  还有功能应该放哪里?放应用上还是放链上代码上面?这有很多因素需要考虑。
 
  央视系统上的计算法律的问题
 
  如果今天给中央电视微电影台设计一个传统系统,这套系统可以很快做出来,从用户点击,有控制中心。可是如果是我们要做一个区块链的应用而且有法律的效应,这样的系统是不够的。因为作为区块链上的数据需要当证据用的。当证据用的时候,不是说有区块链就把问题解决了。有区块链只是起步,还需要设计。有区块链,问题才开始,例如安全、费用、性能多少,这是我花脑筋想的问题。
\
  传统区块链系统设计图
 
  比如说电子证据要有以下特性:
 
  1)及时性:数据是不是及时收集的?如果数据是一天以后才收的,放在区块链上也没人信,法庭上也没人承认。
 
  2)  过程性:不能只是单一数据,要有过程数据。
 
  3)  不能篡改性。
 
  所以单单把一些数据库变成区块链,问题仍然存在!因为它没有及时性,不晓得什么时候数据从控制中心到达区块链;它整个事情只有一道的信息,缺乏过程性。
 
\
  新区块链系统设计图
 
  这是为央视所设计的。可以看到这里有三条区块链链,一个交易链,两个账户链,这个系统我们已经做出来了。用户进来的时候直接先到交易区块链,所以一开始就是及时数据,然后放微电影的时候先到区块链然后再到用户,所以有过程数据,然后及时分账,所以这样就足够成为电子证据的一种系统,这样区块链系统才能真正有用。
 
  高速区块链应用接口 (JBCC)和技术输出到国外
 
  另外,北航、北大、和清华大学一同推出了JBCC (Java Blockchain Connector),因为我们看区块链不只是数字货币或者其他应用,我们把区块链当做系统平台,那么区块链就应该有个公开的接口,所以推出了JBCC。
 
  有了JBCC之后,要做一个示范系统通常只要一个礼拜就能完成。现在我们的区块链已经做出来了,而且是高速区块链。我们准备要部署在中国四间高校做教学研究所用。第一个部署在山东齐鲁工业大学经管学院。让学生学习,老师研究区块链软件工程和技术。
 
  今天英国人对央视计划高速区块链技术感兴趣,想把这个技术输出到欧美。
 
  熊猫央行数字货币模型 (CBDC)
 
  刚才姚司长讲到央行数字货币模型,实际上使用TBC、ABC的概念还可以做一个相当完整的央行数字货币模型“熊猫”, 这可能是世界上第2个央行数字货币模型 (英国RSCoin 是第一个央行数字货币模型)。这个熊猫模型有很好的扩展性。例如说新设一家银行,原来有两家银行,那么新银行自己先做一个ABC,选择加入几个TBC,一下子一个更改过的央行数字货币系统就完成了。
 
  我们知道工商银行在中国是最大的,可能一个ABC解决不了,它可以把一个ABC变成两个ABC。TBC也可以分裂成好几个TBC,而且是可以“动态”组成的,所以我们把传统静态的区块链系统变成新的动态区块链系统。
 
  我从来就是把区块链当做一种学问、当作一个系统,而不只是一个数字货币应用,如果以系统观念来做的话,很多事情都可以做起来。
 
  区块链数据库
 
  很多人说区块链是一个数据库,可是区块链跟传统数据库有非常大的差别,因为传统数据库做事务 (transaction)的时候,是每笔交易单独处理的。可是区块链系统是几千, 几万笔交易一起处理的,这就有非常大的差异。
 
  另外在传统的数据库里面有读 (read) 跟写 (write),读是比较无害的可以并行,写的时候是麻烦的不能并行。可是区块链系统,平常的“读”可能是“写”。在央视系统,有人点视频,它只是“读”视频,可是区块链应用里是记录一个点评、播放,这就变成“写”。比如说以前天津爆炸的时候,一下子间有4亿人观看这个视频,所以在一秒之内可能有几万人在点视频,而我们必须要追踪,所以一下之间在一个链里面有几万个同一个数据“写”上来。在传统数据库这必须停住 (因为不能并行), 可是区块链数据库必须处理 (并行写!)。
 
  区块链写的模型跟传统数据库写的模型不一样,就是必须同时让许多并行的写 (concurrent writes),所以它是一种新的数据库模型。这个在传统数据库是大逆不道,完全不对的。可是央视系统出现这个问题,而且我们必须处理,事实上这还是有办法解决的。
 
  所以说区块链是数据库,可是真正用区块链做数据库的时候就有很多的问题。
 
  链上代码
 
  很多人说“智能合约”解决很多问题,也非常尊崇“智能合约”。但是“智能合约”只是一个“链上代码”。
 
  如果我们看以太坊链上代码模型,在建每一块的时侯,要完成链上代码的执行。可是在我所做的两套大型系统,一个是央视,一个是给金融机构所做的系统,就发觉太坊的链上代码模型根本不行,因为他们要的链上代码是长时间的。多长呢?几个月。比如说股票交易,股票掉到50块的时候就买,这指令可能要待三个月,那链上代码(合约)就必须执行三个月!
 
\
  以太坊链上代码执行模型图
 
  所以“链上代码”的语义必须改变, 因为现在链上代码在每次建块时要完成。
 
  就算有的不需要这么长时间的,一分钟好了,可是一分钟在计算机里面是光年,是非常长的。在高速区块链上,一秒钟就可以有几块建立,每一块可以有几万个交易,链上可以有几千万个账号,这样太坊链上代码模型根本是不够的。
 
  而且每一次建块都要查询哪个链上代码需要执行,一个大型系统一秒钟可能有10万个链上代码要执行 (10万是个很小的数字, 一个链可以有千万个帐户, 10万/千万是很小的比例),但是执行10万链上代码需要花很多时间。在高速区块链上,建块是非常快的,而且有多块同时在建立 (并行的结果),每一次建块需要做大量查询。如果是用传统思维, 用机器来解决,必须有天河计算机才行。这真是Mission impossible “不可能的任务”!
 
  我们可以在系统里面解决这问题。链上代码可以做, 但是应用功能尽量放在应用上,尽量不要放在链上代码,能放在应用就放在应用上。不要追求链上代码,因为这可能使系统慢下来。
 
  第二,大部分链上代码都不应该需要被查询才执行,应该立刻就知道是哪些代码需要执行。
 
  第三,每一个链上代码都只能够处理自己的账户或者是少数相关的账户。
 
  而且大多数的链上代码计算都应该非常简单,稍微难一点,这个链上代码就可能使整套系统的延迟甚至停滞,很多问题就会出现。
 
  有人说把区块链做起来,把计算放在伟大的“智能合约”上,问题就能解决。事实上一放进去,很多问题会出现。
 
  如果要一种长时间的“链上代码”,那中间数据必须放在很多在块里面, 不是一块。一个“链上代码”的结果是由许多块所集成的,那就需要有一个新“链上代码”的语义,这就产生一个新的软件工程研究问题。北大郁莲老师在这问题上有研究。
 
  今天很多学者专家在这边,做系统的人就发觉很多问题是需要克服的。
 
  我就讲到这里,谢谢大家!

第三十届CIO班招生
法国布雷斯特商学院硕士班招生
北达软EXIN网络空间与IT安全基础认证培训
北达软EXIN DevOps Professional认证培训
责编:蔡维德