> For the complete documentation index, see [llms.txt](https://daoone.gitbook.io/blockchain-handbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://daoone.gitbook.io/blockchain-handbook/blockchain-basics/dapp.md).

# 1.8 去中心化应用 (dApp)

去中心化应用（dApps）运行于多个计算机网络节点组成的P2P网络上，而非单个计算机网络中心，自从P2P网络出现后，去中心化应用（dApps）事实上就已经存在，这种软件应用程序被设计成存在于不受单个中心化节点控制的网络上。

* 首先，去中心化应用并不一定必须运行于区块链网络（一种特殊的P2P网络）上，例如：BitTorrent、Popcorn​ ​Time、BitMessage、​Tor这些传统的dApps都是运行于P2P网络之上，而非区块链网络；
* 相对于简单的智能合约如比特币网络（将币从A地址发送至B地址）而言，dApps在目前市场的各个方面都有无限的参与者；

## dApps vs 智能合约

dApps 是“区块链技术赋能”的应用，其中智能合约让它链接上区块链，理解这点最简单的方法就是首先理解传统网站是如何运作的。

* **传统的网站应用**

使用HTML、CSS和javascript来呈现，它需要通过API接入数据库来获取数据，当你登录Facebook时，页面会调用API来抓取你的个人信息从而在页面上展示出来；

*传统网站：前端->API->数据库*

* **dApps**

dApps与传统的网站应用类似，前端用完全相似的技术来展示页面，唯一的不同是替代了通过API接口接入数据库的方式，转而使用可以连接区块链的智能合约；

*dApps：前端->智能合约->区块链*

相对于传统的中心化应用（其后端代码运行于中心化服务器上）而言，dApps将其后端代码运行于去中心化的P2P网络上，从前端到后端组成了去中心化应用，而智能合约仅仅是dApp的其中一部分：

* 前端（即前端所见展示）
* &#x20;后端（即背后的应用逻辑）

另一方面，一份智能合约通常只是整个dApp的一小部分，这意味着如果你想在一个智能合约系统上创建一个去中心化应用，你需要结合几个智能合约并且需要第三方系统来提供前端。

dApps 可以用任何语言来编写前端代码和用户交互界面，同时也可以用其调用后端程序，此外，前端代码还可以被托管在分布式存储（例如[Swarm](https://ethereum.stackexchange.com/questions/375/what-is-swarm-and-what-is-it-used-for) 或 [IPFS](https://ipfs.io)）上。

## dApps 的要求

对于在区块链环境下被视为dApp的应用程序，它必须满足以下条件：

* **应用必须完全开源**

它必须开源自治，并且没有一个主体完全控制该应用的token，该应用必须依据提议改进和用户反馈进行升级，且所有的变更升级必须达成大部分用户共识方可进行。

* **应用的数据和操作记录加密存储**

应用的数据和操作记录必须加密存储在公开的去中心化的区块链上，从而避免任何中心化风险。

* 应用的数据和操作记录加密存储

使用基于底层公链的通用代币如比特币或者自行发行新币是有必要的，从而让这个系统生态中所有贡献者（包括矿工或者应用维护节点）获得相应的代币奖励

* 应用代币的产生

节点对应用的贡献必须根据标准加密算法作为贡献值的证明，获取相应代币奖励（比特币使用的是POW工作量证明）

## dApp 发展进程

* **应用代币的产生**

需要有一份白皮书公布并描述dApp及其特征，并且概述dApp未来发展思路同时详述工作的路径模型。

* **Token预售**

设计初始代币预售

* **ICO（首次代币发行）** &#x20;

首次代币公开众筹

* **启动**

投资的基金用于构建和部署dApp

## 案例：以太坊（Ethereum）

以太坊致力于构建一个去中心化应用的平台，给开发人员提供一个图灵完备的区块链一站式开发平台，允许任何人通过它来编写智能合约和去中心化应用，创建他们自己的规则、功能机制和生态。一般来说，在以太坊（Ethereum）上有3种类型的应用：

* **金融类（Financial）应用**：为他们用户的资金使用上提供更强大的管理方式，可以在智能合约中进行。
* **半金融类（Semi-financial）应用**：涉及到资金，但也有大量非资金性因素在其中进行。
* **行政管理类（Governance）应用**：例如线上选举，以及其他多种不涉及金融的行政管理

如下是一些去中心化应用（dApps）的案例：

* **代币系统**：区块链代币系统中已有很多应用，包括代表资产（如美元或黄金）的货币、公司股票、代币智能资产的个人代币、安全不可伪造的优惠券，甚至包括与传统价值无关的仅仅只是用作激励的积分系统。
* &#x20;**金融衍生品和稳定价值货币**：例如，一个非常理想的应用是这样一个智能合约，通过使用来自例如纳斯达克的数据反馈来对冲美元的波动性。
* &#x20;**身份和信誉系统**：例如一份注明了土地所有权姓名的智能合约可以添加到以太坊ETH网络，且不能修改或者删除，任何人都能因一些价值进行类似的登记记录，从让其无法篡改永远记录在案。
* **去中心化文件存储**：一个类似于dropbox的dApp，其中智能合约将所需的数据分割成块，对每个块进行加密隐私保护，并在其中构建默克尔树（Merkle tree），然后将整个数据分布到P2P网络的各个计算机节点，然而私人数据并不会存储于区块链中。
* &#x20;**去中心化自治组织 (DAOs)**：一个拥有特定成员或股东的虚拟实体（可能拥有67%的多数）有权使用这个虚拟实体的基金并修改其代码，成员们将集体决定该组织如何分配其资源。

## dApp 许可

在开源许可下，dApps可以在不受版权和专利限制的情况下开放创新，另外，通过完全开源，去中心化应用可以在合法的开源软件模式下运行，例如：比特币用的就是麻省理工学院的开源软件许可。

## 资料来源  & 延伸阅读

* Ethereum [whitepaper](https://github.com/ethereum/wiki/wiki/White-Paper) is good place to start &#x20;
* Ethereum [Yellow paper](http://gavwood.com/Paper.pdf) for technical specifications of the blockchain &#x20;
* Pick a language: Solidity the one language that has most extensive documentation &#x20;
* Pick a framework and  test rpc: Solidity frameworks [Embark](https://iurimatias.github.io/embark-framework/) and [Truffle](https://truffle.readthedocs.io/en/latest/) and use [Ethersim](https://github.com/iurimatias/EtherSim) as test rpc &#x20;
* Look at example projects: eg. [Consensys on Github](https://github.com/ConsenSys) &#x20;
* [dApps basic terminology](https://medium.com/technologymadeeasy/develop-dapps-on-ethereum-tutorial-series-for-beginners-part-1-basic-terminology-866d2ce4cf34#.h1gvf5lvj) &#x20;
* [ConsenSys dApps tutorial](http://consensys.github.io/developers/articles/101-noob-intro/#partii)   //链接失效
* [Ethereum Dapps for beginners ](https://dappdaily.com/ethereum-reading-list-for-prospective-dapp-developers-15d515383b23)&#x20;
* [Ethereum reading list for prospective dApp developers](https://dappdaily.com/ethereum-reading-list-for-prospective-dapp-developers-15d515383b23)
* [Full stack  "Hello World" voting Ethereum dApp tutorial  ](https://medium.com/@mvmurthy/full-stack-hello-world-voting-ethereum-dapp-tutorial-part-1-40d2d0d807c2)
* [List of all dApps developed on Ethereum](https://www.stateofthedapps.com/)
