简单应用 (纯链上数据且交互并不复杂), 例如: Uniswap 以及纯链上存储的 NFT 项目.前端与 Web2 App 没有区别.无后端 (链上智能合约作为后端).区块链作为数据库.
原文标题:Foresight Ventures: Crypto-Native DApp 架构
原文作者:msfew
原文来源:Foresight Ventures
当我们开发一个现代化 toC 应用程序的时候, 无论是 Web App 还是 Mobile App 还是 Desktop App, 他们的基本架构都可以用以下三端来概括:
从左到右分别是:
为什么软件都需要这三端? 为什么前端不直接连数据库呢? 中间为什么还要有一个后端? 这其实有很多方面的原因:
开发者角度: 现代化应用的前端没有精力同时处理复杂的数据模型以及视图的状态管理. 工程化的角度而言, 让每个工程师都全知全能地维护一套臃肿的系统是不好的. 除此之外很多的逻辑是不需要前端参与展示的, 比如电商平台的库存等.
架构角度: 每个端都有自己的一套规则和语言去描述数据. 前端用人类能理解的思路来构建页面, 后端用面向对象的语言来操作数据, 数据库使用关系代数语言来访问物理存储. 没有办法规定一套万金油的规则来统一三端. 同时由于语言各司其职, 所以性能侧重点也不同.
协议角度: 观察图中, 可以看到连接三端的两个连接方式是不一样的. 通常 toC 的应用程序前端和后端沟通使用 HTTP 协议, 而后端和数据库则有不同的协议, 如 MySQL 就和 MongoDB 有着不同的协议. 我们可以通过一层很薄的后端 (GraphQL + Hasura) 或者规定新的协议 (OData) 来达到类似前端直连数据库的效果, 也有 CouchDB 这样为这样的通信而生的协议, 但依然没有解决其他的缺点.
数据映射角度: 前端处理 UI, 后端处理对象, 数据库处理数据. 前端与后端的连接使用了 UI 与对象的映射, 后端与数据库的连接需要使用对象关系进行映射.
数据角度: 因为在目前, 我们所使用的应用越来越多是基于 Web 的应用, 所以如果让前端直连数据库, 那么在浏览器这个不安全且开放的环境下, 很难防住数据泄露和黑客攻击. 数据库理论上可以通过各种鉴权等手段控制数据可见度, 但是后端存在的另一个巨大意义就是确保在可信的环境中, 以设计好的方式运行, 并排除已知的安全性问题.
从以上三个角度, 我们分析了为什么 Web2 应用是三端架构, 而这也带给了我们对区块链 DApp 的一些思考:
大多数的 Web3 DApp 都遵循了如下的架构:
更细化地来说, 完整的 Web3 DApp 的工作流程涉及到更多的组件:
区块链网络上的图灵完备的智能合约的存在, 让区块链能成为最好的 Serverless 平台, 或者说是可以被视作 Trustware 的 World Computer. 应用的数据和后端逻辑都可以在智能合约中实现.
和 Serverless 函数相比, 智能合约更加优秀, 也造就了比 Web2 应用更加优秀的架构和模式:
但是, 对于一个真正完整的应用来说, 只通过智能合约作为后端, 是无法实现完整的功能的, 因此会需要有 Keeper 网络或预言机等其他组件.
Web3 DApp 指的是通过智能合约作为后端实现的, 简单的去中心化应用. 要完成一个复杂应用, 可能或多或少会引入中心化的服务, 真正要实现一个 Crypto-native 且 trustless 的 DApp, 则需要在架构上加入新的变化.
Web2 的复杂应用其实也远远不止是我们之前所概括的三端了, 需要非常多模块化, 中间层以及水平拓展的架构拆分.
Web3 前端的触发逻辑其实和 Web2 本身就不太一样. Web3 的操作都是用户进行通过和确认的, 且以链上地址为核心, 而不是 Web2 中, 客户端直接发送到服务器和数据库触发数据更新.
对于 Web3 前端的发展, 我认为有两个大的趋势:
App 架构的演进过程会是这样的:
智能合约虽然让整个应用变得去中心化,但用一个公开网络上的智能合约去处理应用的逻辑是一把双刃剑. 数据与代码公开了, 保证了透明可查与可组合性, 但也把隐私和安全风险完全暴露, 同时链上空间与计算的成本非常高.
ZKP 会成为 Web3 时代的 RSA, 消除应用的通信安全性短板, 和去中心化短板, 真正实现 trusted 且 trustless 的 DApp.
ZKP 的加入作为一个前后端之间的中间层与通信方式, 又一次非常好地发挥了它的两大优点:
有无数项目正在朝着这两个方向努力, 这里就不列举了. 主要需要攻克两个难点:
我们之前讲述了 DApp 如何用区块链来作为后端与数据库. 要让 DApp 连接上区块链网络, 就需要节点服务.
目前来说, DApp 常用的都是中心化的 NaaS, 比如 Alchemy 与 Infura, 未来在我的构想里有三个更好的方向:
最近刚被制裁的 Tornado.cash (尤其是老版本) 是一个非常 Crypto-native 的 DApp, 它满足了我们很多的定义:
我相信未来会有更多应用以 Tornado.cash 的范式来进行架构的打造, 这是目前我心目中最完美的去中心化的 Web3 应用架构.
上述只是简化版的架构, 以下是较为具体的一个实际 DeFi 应用的架构:
其中包含了除了节点服务以外的几个补充的基础设施:
这几个基础设施在一个 DApp 的搭建中至关重要, 我们会在未来的文章中详细介绍 Oracle 与 Indexer 的问题与革新机会.
为什么只有这几个基础设施被纳入考量中, 而诸如 NFT 创作工具, No-Code 合约生成工具, 和合约前端生成器没有被考虑到呢? 因为我个人认为, 一个好的 Web3 基础设施需要有不断的价值捕获的能力, 持续和使用它的应用一起增长, 而不是一次付费就结束了, 这也是 Web2 SaaS 和 Web3 Protocol 中得出的经验.
熊市是一个非常好的搭建和提升基础设施的机会. 我相信这些革新的 Fat Infra 会撑起下一轮 DApp 的创新, 并且作为 Base Layer 捕获到巨大的价值.
在未来的文章中, 我们会详细讨论这些基础设施的最佳潜在优化方案.
责编:Alex