## DApp的产生 App(Application)即应用,也就是我们常说的软件,在计算机诞生之后有限的几十年里,也经历了好几代演变,可以简单概括如下: ![](https://img.kancloud.cn/b8/83/b8831d163089f33cf374db7e4d3b97c8_800x210.jpg) * **单机App:** 组成App的所有元素均存放在一个独立的节点内,无需网络也可使用,这是App存在的最早形态,如DOS系统,单机小游戏等; * **网络App:** 可简单理解为经典的Client/Server模式,App由这两部分构成,可以存在1个以上不同的节点之上,缺一不可;如CS、红色警戒这些传统的网络游戏; * **分布式App:** App的组成元素分散到N个节点,少数节点挂掉的情况下也不影响App的正常使用;如微信、淘宝等; * **P2P App:** 基于P2P网络的应用,App的组成或内容分散到N个节点,节点之间直接通信;目前常见的有BitTorrent下载、区块链应用等模式; **各阶段App产生的背景及其优劣势对比分析:** ![](https://img.kancloud.cn/6f/4e/6f4e4633b7c705784bcb39c65773ee93_619x422.png) **DApp的定义:** DApp(Decentralized Application)又称“去中心化应用”,是相对传统中心化应用的另外一种叫法。其本质就是“智能合约”,只不过在其外层包装了一层接口,使之方便终端用户使用;传统App组成可以简单理解为: > **App = Frontend + Server** 那么DApp则可以简单理解为: > **DApp = Frontend + Contracts** 传统App的Server可以是单节点/分布式/云中的服务节点,它的特点是集中控制,由特定的一个或多个公司/组织/个人所有,属于集权模式,它的所有者可以控制应用的整个逻辑,所以被称为“中心化应用”; 而DApp中的Contracts(智能合约)则是部署在区块链网络中的程序逻辑,它运行在区块链网络中的所有节点内,各节点逻辑完全相同,而且节点所有者可以是任何人,一旦合约部署完成,它的行为不受任何特定的人控制,所以被称为“去中心化应用”。 ## 2 DApp 设计及开发 一个典型的DApp组成如下: ![](https://img.kancloud.cn/c3/3a/c33a38f7419b1f47291ac80d520e0e98_627x505.png) * **前端:** 用户端,可以是手机端App,也可以是网页,甚至可以是命令行,一般是直连区块链节点的RPC服务接口; * **服务端(可选):** 类似中心化应用的服务节点,这里主要是封装DApp自己的服务接口,下层对接区块链,上层对接用户端,为了更好的用户体验,也可能会做一些数据状态缓存; * **区块链端:** 常规区块链节点,对前端或服务端提供区块链的操作接口服务,如发送交易、调用合约、查询结果等动作; **而一个常规的DApp开发流程如下图所示:** ![](https://img.kancloud.cn/51/4d/514d2828bc87366fe929289d6a682128_1920x432.jpg) 其实主要就是包含前端和合约两部分内容的开发,合约最终是部署在区块链网络上的,为DApp的主要执行逻辑,前端为用户交互界面; 即使不用前端,使用区块链的命令行接口依然可以调用合约,实现DApp的完整逻辑,但是用户门槛太高,所以,一般正式的DApp都会提供前端。