DApp 开发指南 —— 01准备篇

写在前面

笔者从 2018 年初进入区块链行业，参与过公链，交易所现货 / 杠杆 / 期货交易业务，链上 DeFi 协议和 DApp 等开发，也从事过不同生态的开发者社区建设，开发者的课程筹备，在这个过程中接触过很多开发者，他们大多数具备 Web2 的技能经验，但对 Web3 的软件开发缺乏足够的认识，反观自己在 Web3 领域的发展路径，大部分是随机漫步和无法获得正反馈的摸索，从一个互联网工程师，转变为一个能够独立构建 DApp 的开发者，这个过程可谓漫长而曲折，当然我也清楚，这是区块链技术逐渐完善的过程，试想在 2018 年就能有一个相对清晰的知识结构去学习如何构建 DApp 应用也是不太现实的.

虽然区块链技术在近年来飞速发展，对开发者来说，因为信息的分散和市场噪音影响，学习门槛并没有降低，尤其这两年笔者将更多的精力放在 DApp 开发和项目投研后，这种感觉更加明显，所以就有了编写此系列文章的想法.

无论是从互联网想要转型区块链还是仍在区块链行业探索的开发者，希望这些文章能够帮助到你.

说明

本系列文章希望能够以结构化的方式帮助开发者利用现有的软件开发技术栈构建去中心化应用 (DApp), 文章面向的读者需要具备基本的 Web 开发技能或熟悉任何一门编程语言。如果你没有软件开发的背景，建议从软件开发的基础技能开始或掌握一门编程语言之后再开始阅读本系列文章.

本文假设读者具备以下能力之一

后端工程师

前端工程师

不熟悉区块链的全栈工程师

软件架构师

本篇文章主要是帮助大家理解 DApp 发展阶段和其与 Web2 应用的相同于不同点:

DApp 发展的几个阶段

在此之前我们需要知道什么是 DApp —— 运行在去中心化网络中的应用，以智能合约加客户端的形式提供服务.
从比特币诞生以来，应用和协议的互相促进演化催生了不同的 DApp 形态，这个过程也出现了不同类型的 DApp 开发浪潮，笔者从 2018 年进入到区块链行业以来，一直在关注应用层和协议层，有幸见证了区块链行业的蓬勃发展

总结下来 DApp 的发展经历过几个阶段:

比特币分叉改进浪潮 (2013~2018) —— 以莱特币和比特现金为首的一众比特币分叉，带来了区块链应用的第一次繁荣，这些应用都停留在更好的去中心化货币和更优的区块链参数上，鲜有技术和应用层的创新出现。市场关注的点更多的聚焦在挖矿群体的利益分配，挖矿硬件的改进和技术主张上，这种叙事直到 2018 年 比特现金分叉为 BCH 与 BSV 为后淡出人们视野。

以太坊智能合约标准与中心化交易所的崛起 (2017~2019) —— 以太坊的出现让智能合约技术得到了相对比特币而言的大规模应用，ERC-20 标准的建立确立了数字货币交易所作为头部应用的主要形态，也明确了区块链应用早期的盈利模式。将投资 / 投机的需求推向高峰.

去中心化金融(DeFi) 萌芽与去中心化自治组织(decentralized autonomous organization - DAO) 工具 (2018~ 至今) —— 区块链并未止步于此，链上 AMM 机制由 Bancor 和 Uniswap 发扬光大，同期也有不少 DAO 组织先驱尝试让 DAO 组织通过低代码的配置方式快速启动一个链上 DAO 组织，Aragon 和 DAOHaus 为首的 DAO 平台催生出更多的 DAO 组织形态与加速了区块链治理思潮普及.

多链 / 跨链与 Layer2和新一代智能合约平台出现 ( Flow, Near, Solana), 为跨链应用打下了基础，同时乐观 Rollup 扩容也转向应用 (Arbitrum, Optimism), 打开了人们对 Web3 增长空间的想象。多链和跨链催生出了大量的服务与创新，比如跨链桥，跨链的流动性聚合等等。新一代智能合约平台也给了开发者更多的选择.

链上数据分析聚合 (2019~ 至今) —— 随着更多的链上用户涌入，链上数据也出现爆发式的增长，数据分析与聚合场景出现，加速了 The Graph 和 ChainLink 等数据服务中间件的采用率，他们极大的提高了 DeFi 和链上应用的体验，进一步的促进了 DApp 的发展。同期催生出更多的 ToD & ToB 的开发者服务平台，如 Infura Alchemy等，进一步提升了 DApp 的研发体验，与此同时用户端的数据分析产品如 Dune 和 Nansen 获得了强劲的增长。作为去中心化存储服务的 IPFS 与 Arweave 等也被广泛采用.

NFT 与 GameFi (2021~ 至今) —— 2021 年是 NFT 爆发的一年，随着之前提到的基建与应用的发展，更加丰富的资产类别，更低门槛标准化的 NFT 研发流程，催生了 PFP 类型的资产和加密艺术的应用形态，Axie Infinity 引爆了 X to Earn 的叙事，着都建立在 ERC-721 和 ERC-1155 的基础上，NFT 的繁荣成就了 OpenSea 等链上 NFT 交易平台.

去中心化身份 (Decentralized identifiers - DID) 与 Web3 社交 (2021~ 至今) —— 随着用户数据和跨链的场景的增加，用户在链上的数据逐渐增加且分散在不同的链上，基于用户的链上数据聚合与链上身份也越来越重要，催生了 BrightId, Proof of human 等应用协议，伴随着去中心化域名 (ENS)[https://ens.domains/] 采用率的提升，为 DID 和 Web3 社交提供了助力，以 Lens CyberConnect 为首的应用让 Web3 social 赛道获得关注.

Web2.5 与 元宇宙 Metaverse (2022~ 至今) —— 随着 2021 和 2022 年 Web3 的影响力出圈，传统的互联网巨头也在寻求新一轮的增长，以 Facebook 为首的互联网公司开始拥抱 Metaverse, 加上拥有巨大品牌影响力的 Nike Adidas Starbucks 等开始试水将区块链融入现有的商业模式中，我们称之为 Web2.5 的应用类型。此外还有更多团队尝试将增强现实 - AR/虚拟现实 - VR/人工智能 - AI 等技术与区块链结合，探索区块链应用的新范式.

可以看到，区块链应用的发展如同一颗进化树，随着时间的推移从比特币开始开枝散叶，在开源社区的推动下枝繁叶茂，这也让我们看到 DApp 开发的趋势，技术协议的演进和应用场景需求是相伴相生的关系。

DApp 应用开发趋势

在区块链发展的初期，DApp 相关的技术栈和概念都没有得到普及，一切都处在刀耕火种的状态，Web3 应用开发者面临着很多的问题，比如陡峭的学习曲线，基础设施不全，合约标准不统一，业务模式不清晰等等，很多在 Web2 看似非常简单合理的需求，在区块链的技术栈中却很难实现，抛开技术差异不谈，大部分时间开发者需要先完善软件开发的基础设施，才能够完成一些应用场景的开发。这就要求开发者既具备一定的架构能力，也需要对区块链底层的深入认识.

在开源社区的努力下，借鉴互联网的发展路径和 Web2 成熟的软件流程，区块链应用的研发趋势也变得明朗，经过社区长时间迭代和演进，新的应用场景出现，催生新的协议和标准，新的协议和标准也反过来推动应用的创新，伴随着新的基础设施和开发工具的丰富，应用研发的门槛在逐步降低，新一代的智能合约平台和协议中间件涌现，这些产品以提高开发者体验为首要目标，基于现有的协议和产品推进 DApp 的繁荣.

对开发者来说，区块链应用开发的趋势:

技术门槛逐渐降低

业务门槛逐渐提高

从技术角度，开源的技术教程和文档丰富，只要稍花精力就能够入手 DApp 开发，现存的工具，中间件和服务已经非常易用稳定，各个生态也有完善的开发者引进流程。开发人员构建一个去中心化应用的难度在持续降低.

从业务角度，区块链目前仍处在非常早期，相对互联网行业来说，技术远未成熟，大多数创业者们仍在探索中前进，又因为其周期性极强，很难建立类似于互联网行业的成熟业务模式，更别提稳定的获客渠道和可控的获客成本。许多业务并不能带来长期的正向外部收入，基于 DApp 的创业风险极高.
当然，高风险也意味着高回报，长期来看，区块链仍然有很大的发展空间.

那么，什么样的 DApp 将成为未来的杀手级应用？笔者也在持续的思考和总结，同时也会在后面的文章中帮助大家分析，现阶段我们更应该关注开发一个 DApp 需要做什么样的知识与技能储备.

DApp 的特点

所以想要从事或上手 DApp 开发的工程师，需要明确的认识到 Web3 的业务和 Web2 的相同或不同之处。一方面帮助我们顺利的完成技能迁移，降低认知转换的难度，另一方面帮助我们明确哪些难点避免可能会出现的问题.

开放透明
DApp 的主要逻辑需要通过智能合约完成，核心的业务数据也是存储在智能合约中，并且这些合约和业务数据都是公开透明可以被第三方检索，这就让以平台和数据垄断为主要竞争力的业务失去了优势，却为应用可组合性提供了基础.

资产导向
DApp 的核心是资产，一切的业务和交互逻辑都将围绕着资产为中心，数据是伴随着资产的变化而产生的。同时资产也可以做为 DApp 与用户交互的媒介，扮演着例如权益，债务，凭证等等角色.

可组合性
有了开源的代码和公开的数据，DApp 就具备了被其他开发者调用和整合的能力，基于一些标准的链上接口，合约之间也可以互相调用，那么 DApp 就具备了如同乐高积木的组合能力，同样 DApp 中的标准化资产也可以跨应用来使用.

交易驱动
这个特性是由区块链的技术特点决定的，基于账户模型的智能合约区块链，所有的链上状态的变更都需要有一个由私钥签名的交易发起改变，智能合约无法发起自动的执行或调用，区块链为确保数据的一致性和有效性，也需要在密码学层面去保证每笔交易的合法性，从而达到分布式数据一致.

事件驱动
虽然对 DApp 来说不得不采用交易驱动的方式去思考用户使用应用的流程，但我们仍然需要丰富的应用数据来提高用户的查询体验，因为区块链只保留最新的全局状态，过程数据分散在不同的区块中，甚至不会被保存在链上，区块链并不支持复杂的关系型查询，需要借助链下的数据索引服务，为了确保数据查询的正确性，我们仍需要以交易为单位来索引过程数据，这里就需要在 DApp 开发的过程中定义交易中产生的事件类型和相关的事件参数，借助链下的缓存服务，完成过程数据的缓存，供客户端查询.

与传统 Web 应用的相同之处

这里和 Web2 的软件研发有很多相同之处:

客户端与服务端架构 (BS/CS)

应用交互流程

软件开发流程

客户端与服务端架构

单纯从应用的模式来看，除了核心的后端服务由智能合约代替，数据存储在区块链上，其他都可以借助传统互联网技术栈完成，
比如客户端的技术栈，缓存服务的索引查询，CND 加速，移动客户端等等都可以借用成熟的互联网解决方案.

客户端与区块链同样是基于 TCP/IP 协议通信，有些区块链或节点服务商也支持 REST 类型的查询接口和协议，方便开发者完成客户端与服务端的数据交互.

应用交互流程
一款优秀的 DApp 同样需要优秀的使用体验，我们也看到很多 DApp 已经能够将区块链的复杂度封装起来，为用户提供美观的产品界面，便捷的区块链交互体验，借助数据索引服务，就能达到媲美互联网产品的交互体验。而这些也需要有专业的产品设计和交互设计的努力，提高产品的易用性，消除用户与 Web3 之间的鸿沟.

软件开发流程
同理，既然是软件开发软件开发和流程管理的最佳实践依然适用，市场评估，需求评审，技术架构设计，用例设计，软件迭代方法，单元测试等等流程也是必不可少，不论是大型应用还是小型应用，都需要经历这些关键流程，才能够更好的完成 DApp 从零到一的过程.

与传统的 Web 应用的不同

那么 DApp 和传统 Web2 的应用区别具体在哪里呢？我们先来看 Web3 DApp 的更加细节的架构图:

这里面的内容我们在准备阶段不再赘述，会在后面的文章中展开讨论.

如果你熟悉 Web2 的研发流程并具备一些研发经验，那么你已经算是半个 DApp 开发者，为了更好的开发出 DApp 我们仍需要有些思维上的转换

从服务授权到签名校验

从数据为中心到资产为中心

从封闭走向可组合性

从效率至上到安全至上

从服务授权到签名校验

互联网产品常用的 HTTP 协议是无状态的，每个请求都是独立存在，通过 cookie 和 session 或 http 头的额外信息来完成用户身份的识别和鉴权.
而这里的鉴权方式以中心化为主，且会根据每个服务自身来决定，并不存在完全统一的标准，但在 DApp 中，鉴权就变成了签名校验，通过数字签名来完成用户权限认证，一切基于加密算法，提高了安全性的同时，也增加了适用性.

从以数据为中心到资产为中心

从互联网平台和应用的角度来讲，数据的重要性不言而喻，针对用户数据垄断和竞争也从未停止，平台中的数据会成为互联网广告变现逻辑的核心生产资料，用户也并不「拥有」自己的数据. DApp 中所有权至上，数据和资产的边界变得模糊，资产作为应用核心的地位凸显，用户的权益数据和业务数据往往也会以资产的形式体现在应用中，很多 DApp 服务都将用户资产作为主要的资源，并基于资产开展业务和服务.

从封闭走向可组合性

传统互联网的护城河是依赖封闭系统与海量数据，但 DApp 却有着相反的方向基于链上公开数据和标准资产，DApp 就具备了可组合的基础，应用开发者可以整合其他应用或协议的资产作为业务基础，也可以提供便捷的 SDK 让第三方整合自身应用的资产。以标准化的方式发行资产，让应用也具备了被组合的可能.

从效率至上到安全至上

中心化的系统因为无需考虑分布式共识问题，其数据可以随意的进行回滚和业务逻辑更新，基于智能合约的应用即不能回滚数据，也无法对合约做到大规模的业务更新，这一切都是以资产安全的角度来考量，去中心化的同时牺牲了效率，作为 DApp 开发者，在设计之初就要考虑智能合约的扩展性和兼容性，同时做好业务的解耦设计，将不经常更新的和可能会更新的逻辑进行合约的拆分。因为业务和用户资产息息相关，同样也需要关注智能合约的权限和可能会出现的安全漏洞。纵观区块链应用的发展历程，是安全漏洞和用户损失的整个历程，作为应用开发者，我们要时刻保持警醒，吸取前人的经验教训，在处理资产逻辑上要谨慎小心，尽可能的做好单元测试和代码审计，将安全风险尽可能的降至最低.

总结

作为本系列的第一篇文章，以概览的形式介绍了区块链 DApp 的发展和特点，帮助我们梳理 DApp 与互联网应用的一些相似与不同，帮助开发者在思维上进行 DApp 构建的储备，不论你是产品经理还是开发者，基于这些概念和理解，让应用设计和开发事半功倍.

之后的文章我们会以具体的实际项目案例来讲解，一个 DApp 从构思设计到研发上线的过程，让我们更加直观的理解一个 DApp 是如何从零到一构建而成的.