2018 年开始,好像所有的人都在谈论区块链。资本、精英、草根也不断进场投身到区块链的浪潮之中。在外围观望的你或许懂技术而对区块链一知半解,或许有场景与创意却碍于其研发门槛,或许是已身处于行业却难于前行。区块链是机遇也是挑战,如何在这风起云涌的区块链世界里获得加速卡实现弯道超车?没有区块链技术基础的你又怎样迅速部署属于自己的第一个应用?
为了解决一部分粉丝的困惑,我们邀请到万向区块链旗下万云平台首席架构师兼产品总监李晨,从以下两个方面为大家分享他和万云团队对区块链技术及应用的思考:一是对区块链技术进行基本介绍,尤其是区块链的发展历史和核心技术;二是分享万云平台在区块链行业当中的探索。
Part 1 技术原理
下图展现的是当下区块链在互联网上的热度,两个最大的互联网平台 Google 和百度均显示区块链的搜索指数呈数级增长,可以发现当下区块链的热度十分高。
从区块链的资本市场来看:二级市场相比一级市场更为严肃,更为传统也相对稳健,从公告和研报的数量来看,区块链在资本市场的表现也十分出色,公告有 443 篇,研报 1000+。综合以上只能用一个字来形容当下的区块链——“热”,非常“热”。
从以上两张图所呈现的数字也反映出两种情况:从搜索指数来看,普通大众对区块链关注度日益增高且势头不减,从相关二级市场的情况来看,专业机构对区块链也越来越青睐有加。
0.0区块链到底是什么,区块链有哪些技术特色?
区块链的诞生之路:在人类历史上经历了几次重大技术革命,第一次工业革命解放了基本生产力;第一台计算机的诞生开启了信息化的进程;而互联网时代的到来建立起数据在不同主体之间的瞬间连接和交换,对信息流通产生了根本性变革;2008 年“中本聪”第一次提出了区块链的概念,开启了信息互联网到价值互联网的变迁,其根本意义在于将原来的数据交换变成价值互联,而价值互联也正是区块链所重构的商业逻辑的关键所在。
从技术的角度定义区块链 :区块链是以区块结构存储数据,多方参与、多方维护,通过密码学、P2P 网络、共识算法等保证数据可靠的传输、存储、访问的技术体系。
区块链最主要的技术特点:去中心化、不可篡改、可追溯。
-
去中心化。在区块链的网络中分布着众多的节点,节点和节点之间地位平等,可以自由连接进行数据交换,不存在中心节点。所谓的去中心化和传统的分布式有稍微意义上的不同,传统分布式还是有中心的节点,最常见的就是所谓的负载均衡节点(Load Balance),只不过在中心节点后有很多其它节点,在数据结构上通常会形成“树”的形式,去中心化是“图”的结构,“图”的结构中每个节点是对等的。
-
不可篡改性。利用密码学的技术保证区块链上的数据不可被篡改,主要是两个点:哈希和非对称加密。
-
可追溯性。区块链的数据结构保证了从第一个区块(创世区块)开始所有的数据形成了一条链,在链上的任何记录都可以通过链的结构追溯到本源(也就是创世区块的信息)。
保证区块链落地应用的技术基石
-
第一块基石是 P2P 网络,P2P 的网络去中心化,高性能,高可靠通讯的保证。
-
第二块基石是密码学,密码学保证数据无法被篡改而且是安全并可验证的。
-
第三块基石是共识算法,区块链网络各节点达成一致性的保障,也是现在评判区块链技术的核心指标之一。
P2P 网络是什么? 如下图所示:传统的网络是中心化的网络,所有的机器、通讯都要走过一个中心化的节点完成通讯,一旦这个节点出现了问题整个网络就瘫痪了。就像现在如果电信、移动、联通的基站出现问题周围的网络通讯将会受到影响。而 P2P 网络并没有一个中心化的节点,所有的节点之间直接互联互通。同时也因为没有中心化的节点,其中任意一点出现问题依旧能够保证整个网络还能通讯,因为你可以连接到其它节点上。所以 P2P 网络是去中心化的,参与各方地位对等,从而保证网络的健壮性、扩展性、高性能。
到这里,李晨补充道:其实所有区块链的底层技术大多都在区块链概念提出之前就已经存在,只是区块链的出现将它们天才有效地结合在一起。比如 P2P 网络很早就出现了,我们常用的 BT 下载,它就是最早的 P2P 网络。
密码学在区块链当中用的非常多。这里着重看如何通过“Merkle Tree”保证区块链上的数据不可被篡改。下图中的区块链数据结构,上方每一个大长方形就是一个区块 (block),该区块内所有的交易数据都被存储在这个区块上;最下方的第三个交易 Tx3,简单说每一个交易会生成一个哈希,Hash3 就是第三笔交易 Tx3 的哈希值。Hash2 下面没有画,是第二笔交易 Tx2 的值,Hash3 和 Hash2 组合在一起就是 Hash23,最后变成“Merkle Tree”的根节点“Merkle Root”。
每一个区块都有 Merkle Tree,区块上所有的交易都会被存储在 Merkle Tree 上。区块和区块之间也是相互链接的,每一个区块都知道上一个区块的 Hash 值。那为什么这样的区块结构能实现数据不可篡改呢?假设我要篡改 Tx3,那我们将要篡改 Hash3 的值,接下来改变了 Hash3 就要改变 Hash23,以此类推一直要改变 Merkle Root 的 Hash 值。因为区块的 HASH 中包括了该区块 Merkle Tree Root 的 HASH 值,所以一旦你改变了区块的 HASH,就必须要修改之后所有区块的哈希值。同时这样的修改还要被网络中超过共识算法要求的节点接受。这就造成了篡改数据树的成本极高,几乎是不可能的。比特币网络运行了那么久,在没有一个人去专门维护它的情况下,从来没有发生过任何篡改,也就是这个道理。
共识算法是区块链比较核心的技术之一,保证区块一致性是其主要作用。常用的共识算法有:POW、POS、DPOS、PAXOS、PNFT。
1.POW 共识算法。也就是常见的比特币网络的共识算法,它通过哈希算力作为工作量证明去竞争记账权。POW 的几个缺点:性能比较低;消耗大量的资源,尤其是算力;出块比较慢,10 分钟左右。但它也优点,抗容错性很好,只有超过 51% 的节点攻击网络,网络才会失败, 容错性 50%。
2.POS 共识算法。相对 POW,POS 是用所谓的权益计算法。相对 POW 来说它有几大改进:不再消耗资源;提高性能,2 分钟左右出块;同样容错性也是 50%。
3.DPOS 共识算法。POS 实现 2 分钟左右出块是比较大的提高,但距离业务的要求还有一定距离,所以在此基础上进行优化产生了 DPOS,简单来说 DPOS 不要求每个节点记帐,而是有代理节点来记帐,这比较像现实生活当中的议会制度,大家选出代表帮忙记帐,这样参与记帐的节点会相对集中,性能也就会提高。所以在 DPOS 情况下基本可以做到秒级出块,容错性也是 50%。
4.PBFT 共识算法。PBFT 也就是所谓的拜占廷容错,它的性能非常非常快,可以达到秒级出块甚至比秒级还要快,但是它的容错性相对差一些,一般是 33% 左右。
5.PXOS 共识算法。PXOS 假设的前提是没有恶意参与者,简单说就是节点不会发送错误的信息,但有可能漏发信息。在这种前提下容错性 50%,性能也是很快的,基本上秒级出块。
通过李晨对这5 种共识算法的分析,我们也可以看到,评判共识算法大概有 3 个标准:
-
效率,达成共识确认的效率,简单就是出块的效率。
-
资源消耗,可能消耗电力、存储或者其他资源;
-
容错性,就是网络可以抵抗多大比例的节点出错。
区块链的分代和分类
区块链分代
按照《区块链:新经济蓝图》一书中的概念,把比特币以及相关的数字货币划分为区块链 1,0,以以太坊为代表的智能合约划分为区块链 2.0,而在非货币和金融领域外,在其他领域里的区块链的应用划分为区块链 3.0。
区块链 1.0 是基础的区块链,实现了数字货币所需的所有特性。区块链 2.0 的核心概念是智能合约,简单说就是可编程的数字货币。虽然只是加了一个前缀,但却是巨大的进步。这意味着不仅仅价值本身,价值相关的商业规则也可以被数字化,是价值互联网的一个巨大进度。关于区块链 3.0,我们无法给出一个统一的评定标准。目前看有几大技术可以算是区块链 3.0 的潜在标准。比如解决链上数据隐私和协作矛盾的零知识证明技术,或者解决连接各种不同链的跨链技术等。
这里简单介绍一个跨链技术 COSMOS。我们认为世界不可能是有一两个区块链所主导的,会有比较多的区块链,每一个链都完成它自己特有的功能。我们会将来生活在一个多链的世界里。通过跨链技术可以形成一个统一的生态系统,包括联盟链和私有链。跨链技术是实现价值互联网的关键,它连接起不同区块链的孤岛,也是区块链向外拓展的桥梁。
COSMOS 是一种前沿的跨链技术,基于 Tendermint 共识引擎。Tendermint 共识引擎实现了跨链技术中的基本技术需求(高性能和一致性)。同时 Tendermint 将共识引擎和底下的 P2P 网络层打包在一起形成 Tendermint Core,加上具有很好扩张性的 COSMOS SDK(实现多代币账户体系,见证人机制和出块等功能),这些都为跨链功能打下了扎实的技术基础。 COSOMS 跨链网络通过 IBC(inter-blockchain communication)协议通信,而 COSMOS HUB 扮演枢纽角色,简单说就是链之间的路由。通过 COSMOS 网络不但可以进行价值跨链转移,扩展 IBC 协议中的 PAYLOAD,还可以进行其他信息的跨链转移。
区块链的分类
区块链分类目前有三种:1. 公有链;2. 联盟链;3. 私有链。
所谓的公有链是任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其中共识过程的区块链。 随着公链规模的扩大,目前一些主流公链的性能都有待提高。 联盟链主要针对有竞争又需要合作的场景,技术上联盟区块链是指其共识过程受到预选节点控制的区块链。只有获准进入联盟的节点才可以参与其中。私有链一般仅在一个公司或者组织内使用,它更像一个分布式账本。
Part 2 应用实践围绕区块链技术的两大核心特征
-
数据不可篡改性。基于这个特征行业中用的比较多的场景是信托。在市场加速释放的前提下,传统信托行业所存在的如文档安全性、时间有效性等信任问题日益凸显,而利用区块链不可篡改的特性能有效解决信托业务中所存在“互不信任”的市场痛点。如何实现?利用区块链技术可以将信托业务中的关键材料经过哈希加密处理,转换成不可逆推的特征值存储在区块链上,信托公司和用户如需进行数据验证,只要将已有的材料和信息经过哈希加密处理,再次与区块链上与其对应的信息进行对比,即可验证材料是否曾经被进行篡改。具体大家可以参考一个案例:万云团队帮助万向信托所开发的基于区块链的家族信托业务,此业务已经上线。
-
可追溯性。钻石一直以来被视为是爱情、权利、地位和富贵的象征,一方面因人类的情感赋予让钻石有了高昂的价值,另一方面也因其价格诱人让市场滋生了走私的风气,从而使得产品与价格混乱,国家税收损失和难于监管。而利用区块链的可溯源特性,以构造共享数据库的联盟链为基础,通过多中心的方式与海外钻石平台、钻石交易所等共享数据,以行业 4C 为标准定义每一颗钻石的身份标签和流转体系,促进钻石交易的正规化。通过可溯源让每一颗存储在区块链上的钻石信息都可查证,让市场上存在的黑手无孔可寻,从而让钻石市场真正回归“透明”。
当然除此之外,区块链技术还可为更多行业提供解决方案,如版权交易、数字存证、智慧医疗等。
简单看万云的区块链生态
万云生态的底层,主要是底层链。我们有两部分,一部分是公链的节点,一部分是联盟链的节点,所有的这些节点都部署在万云的基础设施上,在万云产品的模块中称之为“极速万云”。在节点之上有跨链技术,将所有链整合在一起。这样即做到了统一,又各具特色。万云的底层链上提供两套模块:医师万云 API,直接提供万云上承载的链原始的 API,用户可以在上面部署一个智能合约,也可以直接查询区块链数据。二是万云的 IDE。其特色是既能直接在万云上使用,也可以在本地安装。
李晨提到,更有价值的是在上层。上层不仅有业务 API,也有依据不同行业制定的解决方案。业务 API 落地在区块链上,但是对外呈现的形式和业务本身比较契合。通过业务 API,可以节省开发和运维成本从而更专注于业务创新。
举个小栗子
“万云抽奖”是一款基于区块链的抽奖程序,也是一个完全部署在万云平台上的 DApp,李晨以此为例来从技术的角度重点介绍其诞生流程。
万云抽奖是基于公有链的应用,主要是为解决抽奖过程中的“公开”、“公正”问题,该程序通过将所有抽奖的信息记录在区块链上,保证数据不可被篡改以及可溯源来实现抽奖结果公开。而实现“公正”是抽奖的难点所在,万云团队通过基于区块链来生成随机数解决了这个问题。
传统算法生成的随机数实际上并不是完全不可预测的,在随机种子的基础上结合算法自动生成的的数实际上是可复制的,算不上真正的随机(伪随机数)。随机数的随机性问题是基础算法面临的问题。我们的思路是随机性的生成,不被任何个体所控制,通过这个来解决随机性问题。
随机数通过所有参与者共同产生。首先在区块链中创建一个合约,它定义了参与规则。具体的生成一个随机数的基本过程可以分为三个阶段:
第一阶段:收集有效的 HASH(S), 其中 S 就是随机种子。参与随机数生成的账号都在指定的时间段内向合约发送一定的代币作为质押,同时提供 HASH(S),S 是参与者选择的随机种子。
第二阶段:收集有效的 S。在第一步完成之后,成功申请 HASH(S) 的人需要在第一阶段的指定时间内发送随机种子的 S 到合约。合约将运行 HASH 并将结果与之前提交的数据进行比较来检查 S 是否有效。有效 S 将被保存到种子集合中,用来生成随机数。
第三阶段:计算随机数,退还质押的代币和奖金。在所有随机种子被成功收集之后,合约通过这些种子生成随机数。同时将来自于消费随机数方提供的利润分配给参与方,并将质押的代币退回参与方。 以上,就从技术上实现了一个基本的区块链抽奖应用。同时利用了公有链的激励机制使得这个模式可以运行。
为了方便开发者对分享内容进行更好的理解,大家可以亲自去这个链接中点击万云市场体验一下
https://user.wancloud.io/login.html
作为本次活动的最后一张 PPT,李晨放了一张这样的图。这是 2016 年两张关于区块链技术的研报。其中两句话在当时说的特别好:“区块链是互联网的诗和远方”、“理论照进现实”。当时大家都看好区块链,认为它是未来有可能会改变整个商业模式至关重要的技术。但当时区块链技术还不成熟,只是停留在想法层面,并没有找到切实落地的场景和方案。
当时间的车轮驶向 2018 年以后,我们相信区块链将不再是诗和远方,理论最终也会照进现实,成为时代变迁的标志。而我们身处浪潮之中,所要做的是心无旁骛,努力让区块链实现落地,让所构想的未来图纸成为现实,不只是吟唱诗与远方,而是真正地走到远方。
现场观众问题解答
分享结束后,收集到了十几个现场提问,我们着重选取了两个比较细致的问题请李晨回答。
问题 1:公有链和联盟链在具体应用场景解决各种问题上的区别是?请举出实际应用中的区别案例及案例采用的架构。
公有链是完全去中心化的,任何人都可以参与,全球范围内可以访问,不依赖于单个公司或辖区,最经典的应用案例则是大家都所熟知的比特币。联盟链主要针对有竞争又需要合作的场景,技术上联盟区块链是指其共识过程受到预选节点控制的区块链。只有获准进入联盟的节点才可以参与其中。
另外从联盟链场景出发,会有一些企业级的特性需要满足:
-
高性能,联盟链需要满足企业级的性能标准,由于联盟链节点数有限,采用 PBFT 或者 RAFT 这样的共识算法,一般都能做到秒级出块。
-
隐私性,通常联盟链涉及到多方参与、对等合作的场景,其中隐私性显的比较要紧。比如 A 和 B 的一笔交易,交易的明细只有参与方 A 和 B 知晓,其他节点无权获取,但是又要进行见证,这就是一个具体需求。
-
集成性,联盟链和现有系统进行对接的能力。
-
易用性,比如合约和账号的地址都是一长串字符集,难以阅读和记忆,这里就需要一个将地址和简单名称进行映射的需求。
-
跨链能力,各个联盟链之间如何跨链,联盟链和公有链之间如何跨链。另外还需要考虑运维和治理能力,联盟链升级的平滑性,某些行业还要考虑合规性。
关于联盟链应用架构问题,这里给一个联盟链优化数据交换平台的例子。
中心化的数据交换平台一般都会面临几个痛点:参与方必须为信任平台;监管困难;数据控制权不在用户手中;数据隐私缺乏保护。
具体的解决方案是:建立一个平台,平台用户和第三方监管共同建立的联盟链。通过联盟链账本对所有数据相关操作进行存证;第三方通过其记账节点对整个业务过程进行监管;数据交换平台只能通过联盟链智能合约的接口获取数据,而智能合约只由用户按照标准编写,这样数据控制权就完全在用户手中了;通过零知识证明来保证数据相关的隐私性。
问题 2:区块链如何保证数据隐私性?
按照区块链的基本定义,其实不涉及数据的隐私性问题,只是保证了数据的不可篡改性和可追溯。
但是区块链的架构确实对数据隐私性造成了挑战,李晨认为核心问题就如以太坊创始人 Vitalik 所说的区块链上的很多节点验证了每一笔交易。每一笔在区块链上的交易过程都会被全网广播让所有节点知道。
数据隐私性是个很大的课题。李晨分享了 3 个方法。
-
区块链上只存数据的 HASH 值,保证具体的数据还是在链下存储。简单说,通过链上的数据 HASH 值,证明数据的存在而不体现数据明细。
-
利用环签名机制,环签名是一种特殊的群签名协议。如果你拥有着这组群签名中的任意一个签名的签署权,就能够通过这组环签名中专属于我的签名来证实我就是我,但仅能证明你的签名存在于这组环签名之中,不能证明确切哪个是你的的签名。这样通过环签名签署的交易,可以证明交易的资产属于你,却不用知道具体你是谁。
-
利用零知识证明技术,这是目前相对前沿的隐私保护解决方案。零知识证明就是指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。比如通过告诉一个知道盒子里有什么东西的人,那个东西是什么。就可以证明你拥有盒子的钥匙却不用展示钥匙。ZCash 则是有名的用零知识证明实现匿名交易的例子。
微信公众号: 架构师日常笔记 欢迎关注!