如果我们能将复杂性转移到基础设施层,制作 DApp 应该会更加简单。
撰文:w1nt3r.eth
编译:深潮 TechFlow
也许区块链会永存,但去中心化应用程序 (dApps) 的寿命却很短。
2024 年的万圣节,我尝试打开 2021 年使用过的 dApps,结果令人惊恐:域名过期、部署暂停、页面无法找到、服务不可用。
等等,这些应用程序不应该是去中心化的吗?它们本应是不依赖中心化实体的,像啤酒一样免费,像言论一样自由且抗审查的应用程序。它们是让 Web3 成为新互联网的应用程序。
但是这些应用程序几乎都已消失了,我两年前使用的大多数都不复存在。它们的「幽灵」可能还留在区块链的某个地方,只要你能找到正确的合约地址并猜出正确的调用数据。
为什么会发生这种情况?问题出在哪里?我们能做些什么来改变这种现状?
那么,「dApp」究竟是什么?
让我们翻阅一下我们从史前时代(2016 年)找到的古老文献。
「dApp」是「去中心化应用程序」的缩写。这个概念是,你可以使用开放技术(如 HTML/CSS/JS)制作一个 Web 应用,并将其托管在去中心化和无许可的基础设施上(如 IPFS)。dApp 通过你的钱包与区块链进行交互。你可以获取最新数据并发送交易,而无需依赖中心化公司。
这使得 dApps 几乎是不可阻挡的。免费、无许可、去中心化。这是那些真正朋克精神追求的梦想。
漂亮的登陆页面
然而,大多数人并不在意去中心化和无许可的特性。他们更关心应用程序是否实用(以及数字是否能上涨)。
Web3 的开发者很快意识到,他们正与在 Web2 领域中设计精美、速度快且吸引人的 Web2 应用竞争用户的注意力,而去中心化在这个战场上并没有给他们带来太多优势。
那些深入了解技术的人明白区块链是一个真正的范式转变。但区块链上的一切都是「开源」的,可以被复制,因此它变成了一种商品。没有竞争壁垒。任何人都可以在任何地方部署 Uniswap 合约。事实上,任何人都可以创建自己的 L2!
真正的区别在于品牌、分发渠道、网络效应和用户体验。在数以亿计的 Uniswap 部署中,用户会选择他们信任的(品牌)、容易访问的(分发)、大家都在使用的(网络效应)以及界面友好的(用户体验)。
虽然我最后才提到用户体验,但这并不是最不重要的。糟糕的用户体验会带来负面影响。每个电子商务商店的老板都知道,每增加 100 毫秒的延迟,就可能失去 10% 的用户。如果用户体验不好,你无法打造高端品牌。如果你的应用程序让人用起来心烦意乱,你也无法留住用户。
部署到 Vercel 比部署到 IPFS 更简单
做好事不易
即使大多数用户对去中心化不感兴趣,真正的加密朋克仍然在意。不是说「每个人都应该是去中心化的狂热者」,而是因为「这是正确的做法」。即使当中心化实体变得敌对或遭到审查时,去中心化也能赋予人们权力和自主权。
这就是问题所在。要制作一个既去中心化又拥有良好用户体验的应用程序并不容易。但困难的原因却是因为我们(开发者)变得懒惰。
剖析 BasePaint
让我们来看看当今典型的「dApp」及其所依赖的技术。我将用我自己开发的 BasePaint 来举例。从某种意义上说,它应该是一个「Web3 dApp」:它使用区块链(Base L2)并依赖用户的钱包进行交互。但这还不足以提供良好的用户体验,所以我不得不加入一些非去中心化的元素。实际上,加入了很多。
BasePaint 的技术服务组成
以下是我在开发中不得不采用的集中化技术:
域名。我希望用户能方便地找到我们并访问网站。由于浏览器不支持 ENS,我不得不从域名注册商处购买域名,并配置 DNS 以指向正确的服务器。
托管服务。我需要将应用程序(包括 HTML/CSS/JS 文件)托管在某个地方,并确保访问速度快且稳定。虽然 IPFS 很有潜力,但大多数浏览器不支持,网关速度慢,URL 也不友好
(你试过在手机上输入 QmRxM6Fz3jYBNLTNn59Whtj8uiFodC53Z5nEep6eSkwf8V 吗?)
数据库。区块链在某些情况下是个不错的数据库,但并不适用于所有场景。例如,我们将聊天信息存储在 Postgres 数据库中,因为这样更便宜且速度更快。虽然可以尝试将其上链,但速度永远比不上集中式数据库。
后端服务。BasePaint 还需要进行一些不适合在以太坊上处理的计算。例如,生成视频、同步多个用户的光标位置、验证聊天权限等。此外,我们还需保护一些敏感信息,如数据库连接凭据和私有 Token 等。
以太坊 JSON-RPC 提供商。理论上,我们可以通过用户的钱包来访问区块链。但这意味着没有「支持 Web3」的浏览器的用户将无法看到任何内容。更麻烦的是,不同钱包的 RPC 提供商之间存在细微差异。例如,QuickNode 将日志查询限制在 10,000 条以内,而 Alchemy 使用自己的计算单元来限制请求。使用钱包的 RPC 就意味着要处理这些细微的差异。
索引器。在区块链上存储数据成本高昂。BasePaint 通过不将像素存储在合约中来解决这个问题。相反,它通过 Painted 事件发送所有必要的数据。你可以通过查询智能合约事件重建任何画布。但想象一下在 BasePaint 画廊页面上这样做(我们展示数百个画布!)。为了提供流畅的用户体验,我们运行了一个索引器来跟踪区块链事件,并以便于快速查询的方式存储数据。
其他服务。我们使用 Reservoir 获取二级市场数据和进行跨链铸造,Cloudflare 作为 CDN,R2 用于视频存储和缓存,DataDog 用于日志记录,PostHog 用于分析,Neynar 用于查找 Farcaster 用户的钱包地址。每种服务都为我们节省了数周甚至数月的开发时间,但也使我们的应用程序变得不那么去中心化。此外,许多工具缺乏可持续的商业模式,可能随时关闭。
信用卡。这个问题总是让我哭笑不得。你知道吗,大多数加密 SaaS 产品不能用加密货币支付?如果我的信用卡余额不足或过期,我的域名、数据库、服务器、RPC 端点和其他 SaaS 产品就会下线。
如何实现应用程序的去中心化?
作为一名 Web3 开发者,目前我看到的选择有:
放弃集中化技术,构建一个完全依赖去中心化服务的硬核 dApp。虽然这在 Tornado Cash 等项目中可能可行,但对于普通消费者产品而言,这会带来用户体验上的障碍,可能会让大多数用户却步。
保留集中化的应用程序,同时开发一个仅依赖去中心化技术栈的简化版 dApp。这意味着需要维护两个独立的应用程序,增加了工程工作量和成本。
采用「渐进增强」的策略。从一个简化的 dApp 开始,如果服务器可用,就利用它来提升速度。这需要严格的管理,与第二种选择相比,节省的时间并不多。
开源代码,让用户自行运行(这是我们选择的方向)。但实际上,启动整个系统需要相当高的软件工程能力,比从 IPFS 加载页面要复杂得多。
以上选项都需要付出相当大的努力,并非默认的选择。查看任何 dApp 教程或模板,几乎没有提到这些问题。 其实,去中心化应用开发不必如此困难。如果我们能将复杂性转移到基础设施层,制作 dApp 应该会更加简单。
也许我们应该去解决那些棘手的问题?
我们可以尝试在基础设施层面实现去中心化。例如,将 ENS 支持集成到 getaddrinfo 中,让所有浏览器都能原生支持 IPFS,并提升 IPFS 的速度至与当前最先进的 CDN 相媲美。我们还可以改进以太坊的 JSON-RPC,使其对去中心化应用 (dApps) 更加实用。但这只是简单的部分。
要替代集中式数据库和服务器,我们需要开发出一系列目前还不存在的技术。也许需要一种基于零知识证明 (ZK) 的分布式计算系统,能够在运行代码时获得奖励,或者一个能够高效执行通用 x86 指令的超级以太坊。
此外,我们还需要为围绕加密货币构建的所有服务找到去中心化的解决方案。我们需要设计新的激励机制——谁会为这些计算资源买单?在真正去中心化的系统中,现有的 SaaS 商业模式将不起作用。(但希望这些服务的费用可以通过加密货币支付,而无需信用卡。)
除此之外,我们还必须确保这种新体系的开发体验至少与当前的集中式平台一样好。那些平台已经投入了数十亿美元的工程时间来打磨,并在营销上投入巨资以充斥网络教程,试图说服大家他们的方案是最优的。
这真的重要吗?
「你的科学家们过于关注技术的可行性,却没有停下来考虑这样做是否合适。」——摘自《侏罗纪公园》
但应用层真的需要去中心化吗?
Nouns 向我们展示了或许仅仅是区块链的去中心化就已足够。Nouns 拥有一个繁荣的应用生态系统,所有应用都与相同的合约进行交互。你可以通过 Camp 或 Agora 投票,这并不重要,你只需选择自己喜欢的界面即可。
为了吸引数十亿用户,加密货币可能需要成为现有系统中一个无缝集成的组件。这意味着理想的加密体验是用户甚至不知道自己在使用加密货币,因为它已经被抽象到无关紧要的程度。比如,只需轻触手机就能买到咖啡,至于使用的是 USDC 还是 Visa 网络,用户并不关心。
市场已经找到了一个局部的最优解:
区块链作为基础层是去中心化的,它保障了数万亿美元的资产安全,并为所有权和抗审查提供了强有力的支持。
应用层则是中心化的。公司开发中心化应用,以提供最佳的用户体验。它们的闭源系统形成了对竞争的壁垒,但这些应用仍然与同一个区块链进行交互。
缺少的工具
我希望这种平衡能更多地向去中心化倾斜。我希望能像点击一个链接一样简单地在本地运行我自己的 Nouns Camp 或 Agora 版本。我希望我们能拥有一些工具,使得构建这些去中心化应用变得简单,同时不影响用户体验。
BasePaint 令人惊艳。它是一个自我维持的生态系统:艺术家创作作品,收藏家购买并在二级市场获利,所有者可以通过投票影响日常事务。这种模式行之有效,我们已经通过这种方式向创作者分发了超过一百万美元。
然而,整个系统中最薄弱的环节是我们这个团队。维护应用需要大量的努力,比如修复漏洞和提升用户体验。同时,我们也在努力让系统更加去中心化,比如使应用更易于自我托管,放弃权限控制而不是设置门槛。
结论
去中心化应用(dApps)似乎已经失去了生机,因为「去中心化」的优势目前还不是用户所关心的,因此开发者们需要做出调整。我们已经停止了开发那些旨在使应用去中心化的工具。
幸运的是,区块链的底层基础设施比以往任何时候都更加稳固。基础技术更为扎实,发展路线图也令人期待。我们实际上有机会构建一个全球性的计算平台。
然而,遗憾的是,关于如何增强用户界面的讨论并没有受到足够的重视。dApp 的概念暂时被搁置……