一、前言
在2018年,最火的两个科学技术非"区块链"和"人工智能"莫属了。这两个利器,将成为科技基础以支撑未来中国科技发展的前进方向,谁把握住了这两个大方向,提前在这两个领域站稳脚跟,将项目落地并应用,可以说未来的天下就是属于他的。
互联网的时代产生了众多科技大佬:马云,马化腾,李彦宏,丁磊,张志东,刘强东……他们如今成功登上了福布斯富豪榜,成为了新贵,他们重新将老一辈的技术变革,让中国人的生活方式发生了翻天覆地的变化:如今大家可以在电脑或者手机上刷微博、朋友圈,看知乎,逛论坛,听音乐,看电影以及玩各种各样的游戏。要网购,用手机或者电脑打开淘宝链接或者app轻松一点就可以下单,等着拿快递就行,变革了购物的方式;要看电影,不再需要去电影院,在家里就可以随时随地看;听音乐,不再需要购买录音带、CD,直接在软件或者网站上就可以听音乐;玩游戏,不再需要购买专门的游戏机,玩特定的游戏需要插相应的游戏卡,直接用电脑就可以玩各种游戏,只需要一个游戏模拟器,以前的游戏都可以玩,而且还有各种各样的网游,大型3D游戏等,这些变革了人们享受的方式。这些事情在二十年前是无法想象的,然而,人们现已经适应了这样的生活,享受了这样的便利再让他们回到以前的生活,大部分人都是无法承受的。
在新生活形式下,虽然相比以前,给生活带来了各种各样的便捷和好处,但是,它目前仍然存在着各种各样的不足,例如,网络隐私问题无法保证,新形势诈骗方式防不胜防,信息版权很难有效保护,内容信息质量存在一定的操控性等。幸运的是,区块链的出现让这些问题的彻底解决成为了可能。
二、区块链技术
区块链技术起始于2008年,即化名为中本聪发明的比特币用用到的技术。区块链是一种共享账簿技术,具有分布式、全网记录、低成本、高效率、安全可靠等技术特点,能够降低监管成本、交易风险及其复杂度,提高信息记录可信度,增加监管透明度,共同执行可信流程。技术特点在于去中心化、去信任、可集体维护、可靠。它由一系列基于密码学方法生成的数据块组成,数据块就是区块链概念中“区块”一词所指。按照区块产生的时间顺序,区块被有序链接而形成链条结构,从而被称为区块链。区块链涉及到的技术领域包括分布式存储、密码学、经济学、博弈论、网络协议等,区块链系统可分为数据层、网络层、共识层、激励层、合约层和应用层。
目前虽然区块链仍在发展中,但是现在已经产生有各种各样的版本和各种区块链分类。区块链主要分为三大类:公有链,联盟链和私有链。公有链是指全世界任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其中共识过程的区块链。联盟链是指由若干个机构共同参与管理的区块链,每个机构都运行着一个或多个节点,其中的数据只允许系统内不同的机构进行读写和发送交易,并且共同来记录交易数据。私有链是指其写入权限是由某个组织和机构控制的区块链。
目前,区块链已经有多个语言的版本,例如支持golang,C,C++,python等语言的各种版本。而且已经有了多种的区块链架构方式,例如:比特币、以太坊、Onechain DNA、IBM联盟链(Fabric)、Corda等不同架构的区块链。接下来本文从5个方面对这几种区块链架构进行对比,分析他们之间的异同。特别要指明的是,NEO(小蚁)即是基于Onechain DNA架构构建的,而赞我的技术架构是基于NEO架构上开发。
1、数字资产
Token 也被翻译成代币或者令牌,它不是区块链中必须的。而区块链中内置代币只是作为一种经济激励模型和防止垃圾交易的手段。从下图中可以看出,比特币、以太坊、DNA三个区块链框架支持内置代币,需要特别指出的是比特币就是作为数字资产而生,而以太坊、DNA的内置代币还有一个额外功能是收费渠道,每次运行智能合约或者转账需要消耗gas(很小一部分代币)。
从多种资产的角度来看,以太坊和Fabric不支持多种数字资产,而是通过智能合约来实现相应功能。该方式相对系统设计简洁,但资产创建者得重复编写业务逻辑,不能统一操作自己的资产。相比之下,DNA 和Corda采用底层支持的方式支持多种数字资产,则避免了通过智能合约方式创建的缺点。
2、账户系统
UTXO(Unspent Transaction Output)是这样一种机制(实际上是一种数据结构,定义了相应交易功能以确保交易是否合法):每一枚数字货币都会被登记在一个账户的所有权之下,一枚数字货币有两种状态,即要么还没有被花费,要么已经被花费。当需要使用一枚数字货币的时候,就将它的状态标记为已经花费,并创造一枚新的与之等额的数字货币,将它的所有权登记到新的账户之下。在这个过程中,被标记为已花费的数字货币就被称为交易的输入,而创造出来的新的数字货币被称为交易的输出,在一笔交易中,可以包含多个输入和多个输出,但是输入之和与输出之和必须相等。要计算一个账户的余额时,只要将所有登记在该账户下的数字货币的面额相加即可得出。
比特币、Corda、DNA采用了UTXO这样一种账户机制,而以太坊则采用了更加直观的余额机制:每个账户都有一个状态,状态中直接记录了账户当前的余额,转账的逻辑就是从一个账户中减去一部分金额,并在另一个账户中加上相应的金额,减去的部分和加上的部分必须相等。Onchain DNA在账户机制上同时兼容这两种模式。
那么UTXO模式和余额模式区别在于:基于UTXO的交易可以并行验证且任意排序,因为所有的UTXO之间都是没有关联的,这对区块链未来的扩展性有很大的帮助;余额设计的优点是设计思想非常简洁和直观,便于程序实现,因为在智能合约中处理UTXO的状态是非常困难的。这也是为什么以智能合约为主要功能的以太坊选择余额设计的原因,而比特币、Onchain DNA、Corda这些以数字资产为核心的架构则更倾向于UTXO设计。
关于身份认证,比特币和以太坊基本没有身份认证的设计,原因很简单,因为这两者的设计思想都是强调隐私和匿名,而反对监管和中心化,而身份认证就势必要引入一些中心或者弱化的中心机构。 Fabric、Onchain DNA和Corda采用数字证书来对用户身份进行认证的原因在于它们都有应用于现有金融系统的设计目标,而金融系统必然要考虑合规化并接受监管,此外现有的金融系统已经大范围地采用数字证书方案,这样便可以和区块链系统快速集成。
3、共识机制
所谓“共识机制”,是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。共识机制保证了不同节点间数据的一致性。常见的共识机制有POW、POS、PBFT、DPOS、DPBFT、POOL验证池等。
比特币和以太坊采用了工作量证明(Proof-of-Work)机制来保证账本数据的一致性,其中以太坊还兼容POS共识机制。工作量证明同时也是一种代币分发机制,它通过经济激励的方式来鼓励节点参与区块的构造过程(鼓励矿工挖矿,根据其算力和解决难题从而获得的奖励代币也会更多)。当区块链出现分叉时,诚实的节点将选择工作量较大的链条(即最长的链条),而抛弃工作量较小的。为了维护这样一个工作量证明机制的区块链,需要全网具备较大规模的算力支撑来保证网络的安全性,否则账本数据就有可能被篡改。此外,即使维持较大的算力来保护网络,工作量证明也无法从根本上保证交易的最终性,比如比特币就经常产生孤立区块(Orphaned Block),而包含在孤立区块中的交易就有可能被撤销。因此比特币通常要求用户等待6个区块的确认,在一个可接受的概率上认为交易已经最终完成。而为了维护庞大算力而支出的电力成本也是相当可观,因此,以太坊已经在设计从工作量证明机制切换到其它共识机制上的方案。
Fabric和DNA都采用了基于拜占庭容错(ByzantineFault Tolerance)模型的共识机制。节点被分为普通节点和记账节点(Validating Peer),只有记账节点才会参与到区块的构造过程,这种角色的分离使得算法的设计者有机会将运行共识算法的节点数量限定在一个可控的规模内。拜占庭容错模型对网络中的节点做出了假设和要求:如果共识中有f个节点会出现拜占庭故障,那么至少需要3f+1个节点参与共识才能避免网络出现分叉。在这个模型下,每个区块的构造过程都需要至少2f+1个节点的参与才能够完成,而不像工作量证明机制下每个节点都独立构造区块。一旦区块被构造出来,它就无法被撤销,因为2f+1个诚实的记账节点不会在同一高度对两个不同的区块进行签名认证。
工作量证明机制和拜占庭容错机制各有其优缺点:工作量证明机制提供了极高的灵活性和可用性,因为每个节点都独立构造区块而几乎不需要其它节点的参与,节点可以随时加入或者退出网络,即使全网只剩下一个节点,网络还是可以继续工作,但是相应的它也失去了交易的最终性;而拜占庭容错的机制则与之相反,牺牲了一定的灵活性和可用性,记账节点必须在线提供服务而不能退出网络,一旦出现1/3的记账节点停机,那么网络将变得不可用,但它保证了交易的最终性。
4、智能合约
智能合约是指在区块链中自动执行一小段程序,里面规定了一些合约操作。比特币时代的设计对智能合约的考虑稍有不足,后期随着区块链发展,新型的区块链框架几乎都会内置智能合约的功能,更加灵活。
智能合约的始祖可以说是比特币内置的一套基于栈的脚本执行引擎,它可以运行一种独有的脚本代码,用于对交易进行简单的有效性验证,比如签名验证和多重签名验证等。这套脚本语言被有意设计成非图灵完备的,足够简单却也足以应对货币转账的各种需求。
以太坊是首个以图灵完备智能合约为主要功能的区块链,用户可以在以太坊的平台上创建自己的合约,而合约的内容可以包含货币转账在内的任意逻辑。合约使用一种名为Solidity的语言来编写,它是以太坊团队开发的专门用于编写智能合约的一种高级语言,语法类似Java,最终被编译成字节码并运行在EVM(Ethereum Virtual Machine)之中。EVM提供了堆栈、内存、存储器等虚拟硬件,以及一套专用的指令集,所有的代码都在沙盒中运行。它提供了合约间相互调用的能力,甚至可以在运行时动态加载其它合约的代码来执行。这种能力使得以太坊的合约具有非常高的灵活性,但也可能会使合约的功能具有不确定性。
与以太坊自己动手开发语言、虚拟机的思路不同,Fabric选择了使用现有的容器技术来支持智能合约功能。Fabric的智能合约理论上可以用任何语言来编写,这一点对开发者相当友好,他们将无需学习新的语言,并且可以复用现有的业务代码和丰富的开发库,并使用自己熟悉的开发工具。相对的,采用docker的智能合约架构也有大量的问题:首先,它很难对智能合约的执行流程进行控制,从而无法对其功能进行限制;其次,它无法对合约运行所消耗的计算资源进行精确的评估;此外,运行docker相对而言是极其耗费资源的操作,这就使得难以在移动设备上运行合约;最后,不同节点的硬件配置、合约引用的开发库等,都有可能会使合约的行为具有很强的不确定性。
DNA采用了AVM(AntsharesVirtual Machine)作为其智能合约功能的底层支持。AVM是一个微核心的、平台无关的智能合约执行环境,它提供了一套包含堆栈操作、流程控制、逻辑运算、算数运算、密码学运算、字符串操作、数组操作的指令集,在硬件方面,它只提供了两个计算堆栈。不过,由于它允许区块链的实现者创建自己的虚拟硬件,并以接口的形式开放给智能合约来使用,使得合约可以在运行时取得平台相关的数据、持久化存储以及访问互联网等。虽然这也有可能会使合约的行为具有不确定性,但区块链的实现者可以通过合理编写虚拟硬件来消除这种不确定性。不过,由于目前尚无与AVM配套的编译器和开发环境,这使得基于AVM进行智能合约开发变得相当困难,开发者不得不使用一种类似汇编的语法来进行合约编写,需要较高的技术能力。
Corda的智能合约功能与其自身一样,都是基于JVM(Java VirtualMachine)的。因此,你可以使用任何与JVM兼容的语言来进行开发,比如Java、Kotlin等。不过,它对JVM进行了一定的改造,使得在其上运行的合约脚本具备确定性。开发的过程大致是这样的:使用Java创建一个实现Contract接口的类(class),并提供一个名为verify的函数(function)用于对交易进行验证,该函数接受当前的交易作为参数,如果交易验证失败,则抛出异常(exception),没有异常就表示验证通过。Corda使用JPA(Java Persistence Architecture)来提供持久化功能,支持SQL语句和常用的数据库,不过需要安装相应的插件,并且由于数据仅存放在合约执行者的节点,因此无法进行全局的持久化存储。
5、拓展性
区块链的数据结构的设置是只能追加记录,而不能修改或删除记录,它真实地记录下完整的历史数据,使得新加入的节点有能力对全网的完整交易历史进行验证,而无需信任其它节点。这种特性实现了去中心化的特性,但也影响了区块链系统的扩展性,因为区块会无休止地增长,直到塞满整个硬盘。而该问题,可以采用空间回收问题去解决。
比特币提出了使用默克尔树(Merkle tree)来存放交易散列的方式,当需要回收硬盘空间时,采用交易剪枝操作,即,从默克尔树中去除老旧的枝叶。一个不含交易信息的区块头大小仅有80字节。按照比特币区块生成的速率为每10分钟一个,那么每一年产生的数据约为4.2MB,即使将全部的区块头存储于内存之中都不是问题。
以太坊、Fabric和DNA在比特币区块压缩的基础上,采用了状态快照的方式来节约硬盘空间。具体来说,就是在区块头的结构中不但记录了当前区块所有交易的根散列,还记录了当前区块及过去所有区块中的状态根散列。这些状态包括所有的UTXO、账户余额、合约存储等,所以节点只需要保留最新的区块和完整的状态信息即可。而corda则没有合适的空间回收机制。
交易的吞吐量决定了区块链的拓展性。决定吞吐量的因素有网络结构、加密算法、共识机制等,但最重要的还是交易是否可以被并行验证。交易的并行验证意味这将来可以通过增加CPU数量来提高吞吐量。上文提到的基于UTXO系统的比特币、DNA、corda可以很容易地对交易进行并行验证,因为UTXO之间是没有关联的,对任何一个UTXO的状态改变都可以独立进行且与顺序无关;而基于余额的账户系统(以太坊)则不那么容易实现并行,因为可能会同时发生多笔交易对同一个账户进行资产操作,需要进行一些额外的步骤来处理。
智能合约是否具备状态持久化的能力对交易的并行验证起到决定性作用。如果一组合约都是无状态的,那么它们就可以按任意的顺序被执行,不会产生任何副作用;相反,如果合约可以对一组状态产生影响,那么按不同的顺序来执行合约产生的结果也会不同。由此可见,具备状态持久化能力的智能合约是顺序相关的,因此难以并发验证,特别是如果合约之间还可以相互调用的话,情况将会更加复杂。
目前Fabric没有提出什么好的办法来解决这个问题,而Corda则没有这个问题,因为它的交易本身就不会向全网进行广播,所以只要交易参与者和公证人可以验证即可。以太坊和Onchain DNA的方法都是分区,即将各个合约分到不同的逻辑区中,每个区中的合约都顺序执行,而不同的区之间并行执行。以太坊将合约地址的首个字节作为分区依据,由此产生了256个分区,每个合约都在自己的分区中运行,且只能调用与自己相同分区的合约。但这种做法实际上并不能有效地解决问题,因为总有一些通用的底层合约因为被广泛使用,而把大多数的调用者合约聚集在同一个分区中。
DNA将合约分为功能合约(functioncode)和应用合约(application code)。其中功能合约专门用于提供可复用的功能函数,被其它合约调用,且必须被声明为无状态,这一点消除了绝大部分的合约聚集现象;而只有应用合约可以保存自己的状态,所以在执行应用合约时,对其采用动态分区方案:在合约被执行之前,会先计算出它们的调用树,并将调用树有交集的合约放在同一个分区中执行。
本文从多个纬度对比了各个区块链架构的特点和功能,并阐述了它们在各方面的优缺点,以及在应用领域上的适用性和局限性。比特币虽然是区块链技术的原型,具有非常重要的地位,但由于其技术架构的局限性,如挖矿、非图灵完备等,很难应用到复杂的业务场景中去,但非常适合用于货币发行。以太坊虽然也采用挖矿的形式,但其幽灵协议提高了挖矿的效率,新的共识算法也在开发中,并且还开发了较多的基于密码学的隐私保护方案,比如环签名混币方案,非常适合于创建去中心化自治组织(Decentralized Autonomous Organization)。Fabric和Onchain DNA的定位都是企业级区块链解决方案,适合用于定制各种特定业务的联盟链,包括金融领域的应用场景。区别在于Fabric以智能合约为导向,而Onchain DNA则以数字资产为导向;前者更适合开发复杂的自定义业务流程,而后者则更适合于构建以数字资产为核心的金融业务系统或权益登记流转系统,且具有较强的扩展性。Corda的定位是用于银行间业务的“分布式数据库”,它摒弃了区块和链式结构,更好地把参与者的业务数据区隔开来;但引入了公证人的角色,网络结构较为固定不具灵活性和扩展性,且与现有的银行体系的运作方式差别不大。
总而言之,区块链仍在不断发展中,目前无论是比特币、以太坊,或者是大零币、瑞波币、EOS等,多多少少都存在着问题。所以,现在不断有新的技术、新的区块链架构出现,去完善这些缺点。比特币是开始,它给数字货币开了头(注意,比特币仅主要作为数字货币),让人民认识了区块链,但是它并不一定是终点,迎接全人类的,还有更多更好的、更加好用安全的技术和手段,我相信在不远的将来各个行业与它们结合的应用将以一种极大的安全稳定性存在,解决各种目前存在的问题,从而造福人类。
三、区块链——科技巨头抢食的大蛋糕
上一部分阐述了区块链技术,这部分简单探讨各科技巨头在区块链领域的布局。诚然,在区块链才发展了短短十年间,各大科技巨头已经嗅到了区块链的美妙,也纷纷争先恐后先后布局。如IBM、亚马逊、腾讯、阿里巴巴、百度、华为等都想抢先在这个领域站稳脚跟,占住先入可以享受的红利。
国内先有网易发起区块链宠物 “招财猫”,后有百度 “莱茨狗”,再有小米 “加密兔”及360 “区块猫”。再来看国内几大巨头的具体布局:阿里:2017年初就与普华永道合作,打造可追溯的跨境食品供应链。同年8月,阿里健康与江苏常州市合作我国首个基于医疗场景的区块链应用“医联体+区块链”试点项目。至于蚂蚁金服,早在2016年7月就早将区块链技术应用于支付宝爱心捐赠平台,同时蚂蚁金服技术实验室宣布开放区块链技术,支持进口食品安全溯源、商品正品溯源。腾讯:腾讯区块链平台 “TrustSQL”,目标直指本源——打造数字经济时代信任基石,数字资产、鉴证证明、共享账本以及分享经济,旨在以区块链为基础设施构建安全高效的解决方案,基本将区块链优势包含了一遍,乘着区块链及相关行业发展东风,力求“区块链经济时代”获得更多筹码。百度:推出区块链开放平台BaaS,百度区块链开放平台“BaaS”,是一个商业级区块链云计算平台,依据企业实际业务场景,可对区块链各项目属性、模块和机制进行定制及灵活配置,主要是帮助企业联盟构建属于自己的区块链网络平台。根据其官网介绍,其区块链项目百度Trust目前已成功应用于资产证券化、资产交易所等业务,并促成国内首单运用区块链技术的交易所资产证券化产品。华为:华为云在大会上宣布进军区块链,首选进入互助社群领域,发布基于区块链技术应用的互助社群-阿保互助等。各大科技巨头的在区块链技术上的进军充分说明了区块链是未来的趋势,而趋势,不是某一个国家能够控制得了的。
由此可知,除了科技巨头,国内外都纷纷在想在区块链这个领域分一杯羹,更有一些国家把该技术列为其战略要素,举国家之力去发展区块链技术。例如,委内瑞拉前期发布了石油币;爱沙尼亚利用区块链技术做电子居留(e-Residency),以保护居民健康,甚至用政府行为进行ICO;德国是首个承认比特币合法地位的国家,其银行和制造业纷纷进行区块链技术的改革……从此,可以预见,区块链这块大蛋糕已经上升到国家层面,可见其重要性和意义。
四、赞我乘风破浪,一路前行
赞我在区块链发展特殊的时机应运而生。赞我由蔡叔为首的团队创建,蔡叔对区块链领域已经深耕多年,是资深区块链投资者,而且其已经有很多基于内容的产物,如蚂蚁私塾,请辨、疯狂区块链公众号等,属于准落地项目。从白皮书可知,2018年2月开始,赞我1.0版本上线并进行首轮投资。同时,其技术团队不断扩充,截止目前为止,已经有十几名国内外技术大牛加盟,同时还有十几名顾问。从其每周的周报来看,目前进度稍微比白皮书慢,但是也属于正常范围。
赞我是基于内容的社区,旨在解决版权,优质内容的保护与对作者的回报,更公平的方式去挖掘好的内容、杜绝刷票等问题。它首先是一个兼容所有内容平台的区块链底层协议,其次是一个真正意义上的全内容社区,让全球的内容生产者、需求者、传播者、投资者都能以一个完全不同于当前互联网生态关系模式参与其中。它基于区块链技术,用纯市场共识机制,保证所有好内容得以脱颖而出,所有用户的注意力得到最大的保障。
赞我基于NEO公链,采用dBFT共识机制,在最小资源使用率的情况下最大限度确保系统的最终性。赞我团队自主研发POE机制(背书量证明机制),解决赞我社区内容输出者内容质量高低的问题。同时,结合SHA算法确保所有内容生产者作品的唯一性和安全性。以上技术手段确保了赞我社区的稳定性,随着发展和各位用户的需求,赞我还会不断在社区里面增加新的功能,尽请期待。
虽说目前同类产品国外有Steemit,国内有press.one,赞我成立之初已经对同类项目进行了考察,针对其缺点进行了改进,同时,利用自己团队的已有的前期已经拥有的内容产物:蚂蚁私塾,请辨、疯狂区块链公众号等(其新媒体已在全国有稳定粉丝超百万),将Steemit和Press.one所解决的问题和做的事情都囊括在了赞我社区里,而且进行了创新整合。在区块链这个崭新的行业,竞争异常激烈,我相信赞我团队能够挺住压力,稳步前进,变革内容领域。
目前的微博、贴吧、论坛、视频网站(youtube、优酷、抖音、快手等)、社交网站(脸书、知乎等)等都属于内容的范畴,这一切形式都可以整合在赞我社区里。在赞我社区,可以更容易获得优质内容,而且保障了知识创作者的权益,保护了内容的版权,让所有用户的注意力得到保障。基于此,在未来几年,本人看好赞我未来的发展。
(区块链技术部分参考、引用《小蚁张铮文:写给CTO的主流区块链架构横向剖析》)