(一)什么是DAPP?
DAPP是Decentralized Application的缩写,即去中心化应用,也有人称为分布式应用。它被认为开启了区块链3.0时代。
DAPP就是在底层区块链平台衍生的各种分布式应用,是区块链世界中的服务提供形式。DAPP之于区块链,有些类似APP之于IOS和Android。
(二)DAPP与智能合约、区块链的关系
可以认为,DAPP就是基于P2P对等网络而运行在智能合约之上的分布式应用程序,区块链则为其提供可信的数据记录。
(三)关于智能合约
智能合约是出现在比特币时代之前,由尼克·萨博(Nick Szabo)在1996年首次提出的概念。他对智能合约的定义如下:
“一个智能合约是一套以数字形式定义的约定,包括合约参与方可以在上面执行这些约定的协议。智能合约的基本思想是,各种各样的合约条款可以嵌入到我们使用的硬件和软件中从而使得攻击者需要很大的代价去攻击。”
基于区块链的智能合约构建及执行分为如下几步:1、多方用户共同参与制定一份智能合约;2、合约通过P2P网络扩散并存入区块链;3、区块链构建的智能合约自动执行。
(四)DAPP的特点
目前对于DAPP的特点尚未取得统一看法,但是基本大同小异,这里试归纳如下。
1. DApp通过网络节点去中心化操作。可以运行在用户的个人设备之上,比如:手机、个人电脑。永远属于用户,也可以自由转移给任何人。
2. DApp运行在对等网络。不依赖中心服务器,不需要专门的通信服务器传递消息,也不需要中心数据库来记数据。数据保存在用户个人空间,可能是手机,也可能是个人云盘。
3. DApp数据加密后存储在区块链上。可以依托于区块链进行产权交易、销售,承载没有中介的交易方式。
4. DApp参与者信息被安全储存。可以保护数字资产,保证产权不会泄露、被破坏。
5. DApp必须开源、自治。可以由用户自由打包生成,签名标记所属权。它的发布不受任何机构限制。 各种创意与创新可以自由表达和实现。
(五)DAPP与APP的区别
从客户体验角度,APP相对于DAPP有四大问题,一是截留用户数据,二是垄断生态平台,三是保留用户权利,四是限制产品标准扼杀创新。
从技术角度,DAPP与APP区别主要有两个方面,一是APP在安卓或苹果系统上安装并运行;DAPP在区块链公链上开发并结合智能合约;二是APP信息存储在数据服务平台,可以运营方直接修改;DAPP数据加密后存储在区块链,难以篡改。
(六)DAPP的分类
根据去中心化的对象,DAPP可以进行分类。对于一个中心化服务器而言,包括计算、存储能力,以及所产生的数据三个方面,而由数据之前的关联度又产生了某种特定的“关系”。因此一般而言,去中心化包括以下几类,一是基于计算能力的去中心化(如POW机制),二是基于存储能力的去中心化(如IPFS),三是基于数据的去中心化(如STEEMIT);四是基于关系的去中心化(如去中心化ID)。
根据去中心化的方法,大致可以分为两类DAPP,分别是中介自动化DAPP与中介竞争化DAPP。其中中介自动化DAPP是通过中介自动化而去中心化,如通过区块链转移产权,把从国家掌控的集中程序转变成为需要任何中介,原先的中介成为自动化程序;而中介竞争化DAPP则是通过竞争去中心化,没有完全摆脱中介,而是让参与者选择他们信任的人,也就是说通过竞争去中心化。
根据网络服务形式的不同,DAPP可以分为四类,包括(1)媒体播放器,需要CPU原生代码虚拟机来去掉播放器中介;(2)Web服务(网站)中介利用用户数据作恶,需要类似最新的Lambda服务器(无数据Web服务)来解决;(3)运营商中介作恶,需要去中心化P2P网络,的确这也不一定需要区块链;(4)基于共识的用户态智能合约,只有这个需要区块链。这种分类以亦来云创始人陈榕为代表。
以下根据白皮书及相关信息对以太坊及其他公链进行简要分析。
(一)以太坊DAPP
以太坊协议最初是作为一个通过高度通用的语言提供如链上契约、提现限制和金融合约、赌博市场等高级功能的升级版密码学货币来构思的。以太坊协议将不直接“支持”任何应用,但图灵完备编程语言的存在意味着理论上任意的合约都可以为任何交易类型和应用创建出来。然而关于以太坊更有趣的是,以太坊协议比单纯的货币走得更远,围绕去中心化存储,去中心化计算和去中心化预测市场以及数十个类似概念建立的协议和去中心化应用,有潜力从根本上提升计算行业的效率,并通过首次添加经济层为其它的P2P协议提供有力支撑,最终,同样会有大批与金钱毫无关系的应用出现。
以太坊协议实现的任意状态转换概念提供了一个具有独特潜力的平台;与封闭式的,为诸如数据存储,赌博或金融等单一目的设计的协议不同,以太坊从设计上是开放式的,并且我们相信它极其适合作为基础层服务于在将来的年份里出现的极其大量的金融和非金融协议。
根据以太坊白皮书,一般来讲,以太坊之上有三种应用。
第一类是金融应用,为用户提供更强大的用他们的钱管理和参与合约的方法。包括子货币,金融衍生品,对冲合约,储蓄钱包,遗嘱,甚至一些种类的全面的雇佣合约。
第二类是半金融应用,这里有钱的存在但也有很重的非金钱的方面,一个完美的例子是为解决计算问题而设的自我强制悬赏。
最后还有完全的非金融应用,如在线投票和去中心化治理。
1、token系统
链上token系统有很多应用,从“代表如美元或黄金等资产的子货币”到“公司股票”,单独的token代表“智能资产”,安全的不可伪造的“优惠券”,甚至与传统价值完全没有联系的用来进行“积分奖励”的token系统。
在以太坊中实施token系统容易得让人吃惊。关键的一点是理解,所有的货币或者token系统,从根本上来说是一个带有如下操作的数据库:从A中减去X单位并把X单位加到B上,前提条件是(1)A在交易之前有至少X单位以及(2)交易被A批准。实施一个token系统就是把这样一个逻辑实施到一个合约中去。
2、金融衍生品和价值稳定的货币
金融衍生品是“智能合约”的最普遍的应用,也是最易于用代码实现的之一。实现金融合约的主要挑战是它们中的大部分需要参照一个外部的价格发布器;例如,一个需求非常大的应用是一个用来对冲以太币(或其它密码学货币)相对美元价格波动的智能合约,但该合约需要知道以太币相对美元的价格。最简单的方法是通过由某特定机构(例如纳斯达克)维护的“数据提供合约”进行,该合约的设计使得该机构能够根据需要更新合约,并提供一个接口使得其它合约能够通过发送一个消息给该合约以获取包含价格信息的回复。
3、身份和信誉系统
以太坊中提供与域名币类似的的名称注册系统的基础合约:
if !contract.storage[tx.data[0]]:
contract.storage[tx.data[0]] = tx.data[1]
合约非常简单;就是一个以太坊网络中的可以被添加但不能被修改或移除的数据库。任何人都可以把一个名称注册为一个值并永远不变。一个更复杂的名称注册合约将包含允许其他合约查询的“功能条款“,以及一个让一个名称的”拥有者“(即第一个注册者)修改数据或者转让所有权的机制。甚至可以在其上添加信誉和信任网络功能。
4、去中心化存储
以太坊合约允许去中心化存储生态的开发,这样用户通过将他们自己的硬盘或未用的网络空间租出去以获得少量收益,从而降低了文件存储的成本。这样的设施的基础性构件就是我们所谓的“去中心化Dropbox合约“。
这个合约工作原理如下。
首先,某人将需要上传的数据分成块,对每一块数据加密以保护隐私,并且以此构建一个默克尔树。然后创建一个含以下规则的合约,每N个块,合约将从默克尔树中抽取一个随机索引(使用能够被合约代码访问的上一个块的哈希来提供随机性), 然后给第一个实体X以太以支撑一个带有类似简化验证支付(SPV)的在树中特定索引处的块的所有权证明。当一个用户想重新下载他的文件,他可以使用微支付通道协议(例如每32k字节支付1萨博)恢复文件;从费用上讲最高效的方法是支付者不到最后不发布交易,而是用一个略微更合算的带有同样随机数的交易在每32k字节之后来代替原交易。
这个协议的一个重要特征是,虽然看起来象是一个人信任许多不准备丢失文件的随机节点,但是他可以通过秘密分享把文件分成许多小块,然后通过监视合同得知每个小块都还被某个节点的保存着。如果一个合约依然在付款,那么就提供了某个人依然在保存文件的证据。
5、储蓄钱包
假设Alice想确保她的资金安全,但她担心丢失或者被黑客盗走私钥。她把以太币放到和Bob签订的一个合约里,如下所示,这合同是一个银行:
Alice单独每天最多可提取1%的资金。
Bob单独每天最多可提取1%的资金,但Alice可以用她的私钥创建一个交易取消Bob的提现权限。
Alice 和 Bob 一起可以任意提取资金。
一般来讲,每天1%对Alice足够了,如果Alice想提现更多她可以联系Bob寻求帮助。如果Alice的私钥被盗,她可以立即找到Bob把她的资金转移到一个新合同里。如果她弄丢了她的私钥,Bob可以慢慢地把钱提出。如果Bob表现出了恶意,她可以关掉他的提现权限。
6、作物保险
一个人可以很容易地以天气情况而不是任何价格指数作为数据输入来创建一个金融衍生品合约。如果一个爱荷华的农民购买了一个基于爱荷华的降雨情况进行反向赔付的金融衍生品,那么如果遇到干旱,该农民将自动地收到赔付资金而如果有足量的降雨他会很开心因为他的作物收成会很好。
7、去中心化数据发布器
对于基于差异的金融合约,事实上通过过“谢林点”协议将数据发布器去中心化是可能的。
谢林点的工作原理如下:N方为某个指定的数据提供输入值到系统(例如ETH/USD价格),所有的值被排序,每个提供25%到75%之间的值的节点都会获得奖励,每个人都有激励去提供他人将提供的答案,大量玩家真正同意的答案默认就是正确答案,这构造了一个可以在理论上提供很多数值,包括ETH/USD价格,柏林的温度甚至某个特别困难的计算的结果的去中心化协议。
8、多重签名智能合约
比特币允许基于多重签名的交易合约,例如,5把私钥里集齐3把就可以使用资金。以太坊可以做得更细化,例如,5把私钥里集齐4把可以花全部资金,如果只3把则每天最多花10%的资金,只有2把就只能每天花0.5%的资金。另外,以太坊里的多重签名是异步的,意思是说,双方可以在不同时间在区块链上注册签名,最后一个签名到位后就会自动发送交易。
9、云计算
EVM(虚拟机)技术还可被用来创建一个可验证的计算环境,允许用户邀请他人进行计算然后选择性地要求提供在一定的随机选择的检查点上计算被正确完成的证据。这使得创建一个任何用户都可以用他们的台式机,笔记本电脑或者专用服务器参与的云计算市场成为可能,现场检查和安全保证金可以被用来确保系统是值得信任的(即没有节点可以因欺骗获利)。虽然这样一个系统可能并不适用所有任务;例如,需要高级进程间通信的任务就不易在一个大的节点云上完成。然而一些其它的任务就很容易实现并行;SETI@home, folding@home和基因算法这样的项目就很容易在这样的平台上进行。
10、点对点赌博
任意数量的点对点赌博协议都可以搬到以太坊的区块链上,例如Frank Stajano和Richard Clayton的Cyberdice。 最简单的赌博协议事实上是这样一个简单的合约,它用来赌下一个区块的哈稀值与猜测值之间的差额, 据此可以创建更复杂的赌博协议,以实现近乎零费用和无欺骗的赌博服务。
11、预测市场
不管是有神谕还是有谢林币,预测市场都会很容易实现,带有谢林币的预测市场可能会被证明是第一个主流的作为去中心化组织管理协议的“ futarchy”应用。
12、链上去中心化市场
以身份和信誉系统为基础。
(二)以太坊的问题及其他公链的兴起
区块链2.0是以智能和约平台为特征的以太坊区块链。从连接用户日常场景的角度来说,以太坊 EVM 存在两个主要问题:
1. 单主链结构,计算能力有上限,无法扩容;
2. 区块链作为存储和计算空间,无法支持用户日常生活场景,无法应用数字内容。
目前各公链都针对DAPP开发和完善以太坊基于不同的角度提出了各种方案。
(三)其他主要公链特点
以下简要介绍亦来云(elastos)、EOS、NEO、墨客链(MOAC)。
1、亦来云(elastos)
亦来云(elastos)通过提供可信运行环境,致力于打造智能万维网。亦来云不需要结合安卓或IOS都可以运行,是完全单一的,所以是世界上仅有的分布式可信操作系统,基于可信属性和独立运行环境,这个操作系统可以承载大规模应用。
具体来说,一是亦来云采用主链 + 侧链的弹性区块链设计结构。主链只负责基本的交易和转账支付;侧链执行智能合约支持各种应用和服务,每条区块链都是一台服务器。二是亦来云通过 Elastos Runtime 将 App 运行在相互隔离的进程、通信受限的沙箱环境中。所有网络数据必须通过安全、可信、可识别身份的通道发送,这些身份识别和鉴权都来自于区块链身份 ID。这样就让区块链的可信传递到 Elastos Runtime。而 Elastos Runtime 可以有多种形态:可以是独立 OS,可以是 VM 虚拟机,可以是结合原生 App的 SDK。
亦来云(elastos)设计基本理念是:
(1) 采用C/C++、JAVA、HTML5/JS三类语言并重的开发模式,其C++编程API基本对应安卓Java API,实现云、管、端三位一体统一管理;
(2) 作为容器沙箱,亦来云OS禁止App直接创建进程,不允许App直接访问TCP/IP,以期隔离病毒传播途径;
(3) 亦来云分布式框架(Elastos Framework)代App创建和查找部署于本地、周边、云里的微服务,自动生成远程调用及事件回调,以期规避从第三方应用或服务发起网络攻击的可能性。
(4) 利用区块链进行用户ID确认,进而对数字内容及物联网设备进行资产确权。
(5) 智能合约只运行于相关侧链协议授权方节点,从而提高验证效率并可兼容法定数字货币。
2、EOS
EOS通过共识算法 (DPOS)来解决可扩展性的问题,DPOS每 3 秒生成一个区块,并且在任何时间点都只有一个被授权的生产者来生成区块。这样EOS可以说同时做到了承载大量用户、速度快(仅仅需要3S)、交易费用这几点。但DPOS机制可能存在的不足是:临时股东大会制度,会导致出块的永远都是那些拥有大量代币的用户,结果大部分的奖励都被他们拿走了,进一步造成“贫富差距”,恶性循环,最终成为一个巨头垄断的中心化网络。
EOS突出特点如下,
一是EOS免手续费。EOS21个出块节点和100个候选节点加起来成本不会超过千万。这是低费用的基础。EOS通过每年增发代币,也就是通胀作为奖励来支付节点成本。
二是EOS通过抵押代币防止垃圾交易攻击。一个应用抵押EOS给系统,换取相应比例的计算、存储和带宽资源。
3、NEO
NEO主要具有如下特点:
一是NEO采取DBFT共识机制,在牺牲去中心化和安全性的前提下,旨在提升公链性能。
二是与以太坊solidity相比,NEO对于智能合约开发者更为友好,可以用他们擅长的语言而不需要学习新的编程语言,可操作性极高。
三是与以太坊智能合约相比,NEO智能合约2.0可扩展性更强.NEO通过将智能合约哈希值记录在链上,在执行合约时再从链外加载代码。
四是NEO在理论上具备抗量子计算机的能力。NEO引入基于Lattice(格密码学)的签名和加密技术,将加解密问题归约到量子计算机尚无法解决的SVP(最短向量问题)。
4、墨客链(MOAC)
墨客链MOAC,Mother of All Chain Blockchain (简称 “MoacChain”,中文音译为“墨客链”,又称“众链之母”)是一个开源的区块链平台。
第一,墨客链(MOAC)的主链是可扩展且有弹性的。墨客链(MOAC)主链的特性具有可扩展。墨客链采取了分片sharding技术,可以将墨客分为无数逻辑子网,使得并行计算成为可能,大幅度提高处理速度。在墨客链中,无数的逻辑子网就是平时我们所说的节点网络。
第二,墨客链(MOAC)异步智能合约的调用,大大增加处理智能合约的数量。而墨客采取了异步智能合约调用,使得调用和返回可以跨区块运行,极大的加快了智能合约的处理速度。防止墨客链的拥堵,甚至可以说,墨客链(MOAC)在以后的运行中,不存在拥堵的现象。
我们对DAPP开发特点、架构分析和技术流程等问题作一简要说明。
(一)DAPP开发特点
DAPP与APP在很多地方如用户操作界面上是很相似的,但其特点很明显。
一是生态结构变化。区块链的数据确权、价值网络属性可以变更现在的互联网价值生态,区块链使得一些原来的权威中介失去意义。比如目前版权成本高昂导致作者等需要付出极高的成本打击盗版,对很多侵权行为往往只能不了了之。如果基于区块链技术,则作者与读者双方的联系变得更直接,作品可以被版权方确权,用户可以通过直接通过token向作者支付的费用。在此生态内盗版的问题通过技术手段被解决,版权争夺成本下降,作者专注于写作。
二是交易模式更新。在传统的非区块链状态下的交易,对交易主体的资信、交易对象的可交易状态,以及交易条件等的审核都需要耗费大量的成本,比如目前基于金融中介(例如银行、VISA等)的交易处理方式效率低,信用生产成本相对高,而且相互之间对数据还互不信任互不兼容。而基于区块链技术,就可能在不对现有业务流程做大的变动升级的情况下,通过基于区块链形成的可信账本就解决了这些问题。
三是数据共享方便。中心化的APP场景下要实现不同应用之间的数据共享是比较麻烦的。但在DAPP场景下一般公链内的应用都会支持包括用户身份在内的数据共享(比如亦来云的DID侧链)。那么对其他DAPP的开发者而言,可以从其他生态内的开发者处共享到用户实名资料,在根据哈希值匹配获取数据时只需要支付Token即可;而对用户而言,这也算是POD(Proof of Data)挖矿模式,可以说实现了数据归自己支配和收益。
四是颠覆设计思路。目前互联网产品设计思路是不断推出新版本,这个传统方式可能在DAPP应用开发中会有问题或者说至少不那么顺畅。简单来说,现有的APP都基于自有服务器,重大问题迭代强行刷新版本即可,但DAPP基于分布式的区块链网络,一旦提交上线出现核心bug很难迭代。拿以太坊为例,一旦发生这类bug,只能以硬分叉解决,这就是DAPP与现有APP设计思想的不同,在MVP1.0的调研阶段,一定要确认核心机制不出意外。
(二)DAPP设计分析
我们不妨先结合一个具体的例子如大宗商品国际贸易的区块链化项目来说明去中心化应用架构设计过程。从某种程度来说,去中心化应用都是对中心化服务的改造,那么在开发应用模型时首先要考虑的问题就是,所设计的去中心化应用要取代或者说改良的是中心化服务的哪一个方面?比如大宗商品交易通常金额比较大,交易的信任成本非常高,体现在需要对交易主体资信审核,作为交易对象的仓单真伪、质押、重复交易等权利状态审核,对支付方式等交易方式审核等多个方面。那么在这个场景里去中心化应用需要解决的是作为资产确认及交易确认的信息记载公信力问题。为了提高这种记载的公信力,需要将原来中心化记账形式改造成为去中心化记账。那么如何改造呢?记账还是要记的,但是任何单独的主体都难以信任,因此就采用竞争性地提供工作量来记账。那么至此方案就很明确,大宗商品国际贸易实际交易操作中,通过进行资产上链,将交易过程和交易结果信息进行区块链化,然后通过去中心化记账来解决传统交易模式的信任成本。
一般而言,在考虑一个去中心化应用的架构时要解决几个方面的问题,包括去中心化的对象问题、去中心化的方法问题、去中心化的约束机制问题,以及去中心化应用的技术实现问题。
一是去中心化的对象是什么?即在这个中心化对象中,其起作用的是计算能力,还是存储能力,还是数据?甚至还有其他方面?
二是如何实现去中心化?即是将中介自动化还是中介竞争化?这二者的区分有时候很清楚,有时候可能会混合在一起。
三是实现去中心化约束机制是什么?所谓去中心化应用的约束机制,主要是指在实现去中心化应用时要有机制能够约束去中心化参与各方特别是主要和关键参与方,确保达到理想中的效果。比如在中介竞争化中,调停具有相当的自由裁量权,因此将信誉作为一种约束机制就成为必要。在中介自动化中,去中心化资产支付如果不能与资产的控制权不可分割性联系在一起,即支付即产生资产转移,那么链上资产的转移的产易风险还是比较大的,因此资产支付与资产控制的技术对接是中介自动化中的关键。
四是去中心化应用的技术实现问题。因为开发一个DAPP应用而重新去开发一条链很可能是不必要的,在目前的大多数性能稳定可靠的公链上即可方便地实现主要的区块技术方案,而作为去中心化应用而言其重心应该是如何实现其个性化业务逻辑,因此需要用什么样的基础公链也成为去中心化应用的一个重要环节。公链选择主要从方便应用调用智能合约、账本的记录方式、社区治理模式等方面是否与所开发的应用的业务逻辑相契合。
(三)DAPP技术流程
如何开发DAPP?大体包括选择基础主链、开发模式与语言选择两个方面。
1、基础主链。如前所述,开发DAPP之前需要选定一个主链,这就有点像做软件开发之
前先要选一个应用平台,如是选择苹果iOS或者android,亦或简单点做一个H5的手机网站。开发DAPP应用平台即通常说的基础主链的选择还是比较多的,目前主流的就有以太坊ETH、亦来云ELA、EOS等等。
选择开发主链主要是看有利于DAPP运行和对开发者友好,主链的开发环境与主链开发
者社区要相对成熟,社区关注度高,人多就是教程多、工具多,各种心得攻略就多;二是代码维护团队的接口更新维护快。
2、开发模式与语言选择。目前有三种DAPP模式,一是全节点客户端,离线同步全部数
据,无需专门服务器支持;二是快速全节点客户端;三是轻钱包前后台模式。热门开发语言有C++、solidity