一篇文章让你读懂DAPP

96
币圈大神
2018.07.25 10:42 字数 3658

关注公众号:“币狗解读区块链”

——————————

回复"资料",免费领取 10G 区块链学习资料(400白皮书+翻墙软件+新手快速入门+老鸟必看行情)

回复"群",免费领取各大币圈优质项目官方群进群名额。


一、什么是DAPP

(一)什么是DAPP

DAPP是Decentralized Application的缩写,即去中心化应用,也有人称为分布式应用。它被认为开启了区块链3.0时代。DAPP就是在底层区块链平台衍生的各种分布式应用,是区块链世界中的服务提供形式。DAPP之于区块链,有些类似APP之于IOS和Android。

(二)DAPP与智能合约、区块链的关系

那么DAPP与智能合约是否一回事?与区块链到底是什么关系?通过一个示意图比较简单明晰地表达。可以认为,DAPP就是基于P2P对等网络而运行在智能合约之上的分布式应用程序,区块链则为其提供可信的数据记录。

(三)关于智能合约

智能合约是出现在比特币时代之前,由尼克·萨博(Nick Szabo)在1996年首次提出的概念。他对智能合约的定义如下:

“一个智能合约是一套以数字形式定义的约定,包括合约参与方可以在上面执行这些约定的协议。智能合约的基本思想是,各种各样的合约条款可以嵌入到我们使用的硬件和软件中从而使得攻击者需要很大的代价去攻击。”

基于区块链的智能合约构建及执行分为如下几步:

多方用户共同参与制定一份智能合约;

合约通过P2P网络扩散并存入区块链;

区块链构建的智能合约自动执行。

(四)DAPP的特点

目前对于DAPP的特点尚未取得统一看法,但是基本大同小异,这里试归纳如下。

DApp通过网络节点去中心化操作。可以运行在用户的个人设备之上,比如:手机、个人电脑。永远属于用户,也可以自由转移给任何人。

DApp运行在对等网络。不依赖中心服务器,不需要专门的通信服务器传递消息,也不需要中心数据库来记数据。数据保存在用户个人空间,可能是手机,也可能是个人云盘。

DApp数据加密后存储在区块链上。可以依托于区块链进行产权交易、销售,承载没有中介的交易方式。

DApp参与者信息被安全储存。可以保护数字资产,保证产权不会泄露、被破坏。

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开发相关问题

我们对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(类似JavaScript的一种语言)、go、C++。

日记本
Gupao