原文标题:《Web3 堆栈:Web 2.0 开发者需要知道的东西》
本文来自微信公众号:老雅痞
尽管 Web3 的开发者生态系统在更大的网络开发者生态系统中只占很小的比例,但它似乎在快速增长——因此,尝试并确定 Web3 技术堆栈的组成部分很有意义。我们知道它包括用于去中心化的区块链,以及作为身份形式的加密货币钱包。您可能还听说过名称华丽的分布式存储解决方案,如星际文件系统 (IPFS)。但是开发者还需要学习什么才能进入 Web3 的世界呢? 另外,传统的网络技术如 JavaScript,如何适应 Web3 环境呢?
到目前为止,我所遇到的关于 Web3 堆栈的最佳定义是由 Nader Dabit 写的,他是一家名为 Edge & Node 的 Web3 公司的开发者关系工程师。我第一次采访 Dabit 是在 2020 年 8 月,当时他在亚马逊网络服务公司担任无服务器专家。那时,他刚刚在 O 'Reilly Media 出版了一本名为《全栈无服务器:使用 React、AWS 和 GraphQL 的现代应用程序开发》的书。2021 年 4 月,他将这些技能带入了新生的 Web3 世界。他在 Edge & Node 的部分工作是帮助构建 The Graph,「一个用于用 GraphQL 索引和查询区块链数据的 Web3 协议。」
我联系了 Dabit,问他做 Web3 开发人员与他以前在 web2.0 公司工作有什么不同。但首先,让我们仔细看看他的 Web3 参考文章。他将 Web3 堆栈分类如下:
- 区块链
- 区块链开发环境
- 文件存储
- P2P 数据库
- API(索引和查询)
- 身份
- 客户端 (框架和库)
- 其他协议
正如他所指出的,这个堆栈与传统的网络架构「在许多方面完全不同」——区块链和基于加密货币的身份是两个最明显的区别。Dabit 还提醒说,「Web3 工具、技术和生态系统不如 Web2 成熟。」
「从网络基础设施的角度来看,」Dabit 告诉我,「主要的区别实际上是围绕着我们所认为的『后端』技术,但在 Web3 中,它们通常被称为『协议』。」
让我们先从简单的部分开始。根据 Dabit 的说法,Web3 的客户端技术 (框架和库) 本质上与 Web 2.0 相同。在前端应用中大量使用 JavaScript,而且就目前 Web 2.0 的状态而言,React 是一个领先的 JavaScript 框架。Dabit 指出:「绝大多数的 Web3 项目和例子都是由 React 构建的。」
Dabit 向我解释说:「除了实际的 HTTP 客户端库之外,前端技术并没有太大区别。」因此,要通过 HTTP 协议与服务器通信,"你可以使用 web3.js 或 ethers.js 与 rpc[远程过程调用],或者使用 graphql 客户端与 The Graph 对话,而不是使用 fetch 或 axios。" Web3.js 和 Ethers.js 都是 JavaScript 库,使开发者能够与以太坊区块链交互。
「此外,身份以及我们处理身份的方式在前端也是不同的,」Dabit 说。「要读取数据,你不需要了解用户的任何信息,因为几乎所有的数据都是公开的。但要写入数据,通常需要连接到用户的钱包。有几种方法可以做到这一点。在桌面应用程序中,用户通常会为他们的钱包添加一个浏览器扩展,它会自动为网络注入一个全局窗口对象 (例如 Solana、Ethereum、Arweave)。或者在移动端,它将允许你在钱包应用程序中进行认证,并在签署交易后重定向。」
如果你尝试过购买加密货币或 NFT,或尝试过 dapp(去中心化应用程序),那么你很有可能已经使用过 MetaMask——它有一个浏览器扩展,可用于 Chrome、Firefox 和基于 Chrome 的浏览器,如 Brave。MetaMask 由 ConsenSys 所有,该公司有理由称自己为「领先的以太坊软件公司」。
ConsenSys 还在 Web3 中拥有领先的 IDE(集成开发环境)之一。Truffle 是一个「使用以太坊虚拟机 (EVM) 的区块链开发环境、测试框架和资产管道」。除此之外,它还提供了「智能合同生命周期管理」和「自动化合同测试」。
现在我们来看看 Web3 堆栈更复杂的方面。到目前为止,大多数开发人员都熟悉区块链的概念——基本上,它是一个分布式的数据分类账本。但有许多不同类型的区块链。最重要的两种是比特币和以太坊 (并非巧合的是,与这些区块链相关的加密货币是两个市场领导者)。但比特币的可编程性就像计算器一样——正如以太坊研究员 Justin Drake 在播客《Web3 Breakdowns》的一集中所说的那样,以太坊是一个完全可编程的「图灵完备」计算机。
以太坊的可编程特性导致了以区块链为重点的网络开发堆栈的新模式——也就是「Web3」。以太坊的原则之一是,理论上你可以在它上面构建任何东西。用 web 2.0 的说法,它是一个网络平台。以太坊是最大的 Web3 平台,它也兼容其他一些区块链。因此,成为 Web3 开发人员的主要途径就是学习如何使用以太坊。
你可能听说过 Solidity,一种用于以太坊区块链的编程语言,有点类似于 JavaScript。虽然这是事实,但 Solidity 仅用于为区块链编写「智能合约」——将数据和数据的任何指令放在区块链上。
「在区块链世界中,学习 Solidity 和 EVM(或以太坊虚拟机) 可能是作为区块链开发人员入门的最佳选择,」Dabit 在他的文章中解释道。
「使用这个技能组合 (和技术堆栈),你不仅可以为以太坊,还可以为其他以太坊二层、侧链,甚至其他区块链,如 Avalanche、Fantom 和 Celo 构建。」
然而,作为对 Web 2.0 世界的另一种认可,Rust 也正在成为智能合约开发人员的必备技能。Dabit 将 Solana、NEAR 和 Polkadot 列为具有「一流的 Rust 支持」的三个区块链示例。
Dabit 告诉我:「我认为 Solidity 和 Rust 是智能合约开发中使用最多、需求量最大的语言。他补充说,由于经验丰富的智能合约程序员相对较少,他们可以轻松地获得「每年数十万美元左右的薪水,我甚至看到过一些经验最丰富的程序员年薪在 100 万美元左右。」
Web3 开发中最棘手的部分之一是数据的存储和使用。虽然区块链擅长成为不可变数据的「去信任」链,但它们在存储和处理大量数据方面也非常低效——尤其是对于 dapps。这就是 IPFS、Arweave 和 Filecoin 等文件存储协议的用武之地。
Arweave 是一个开源项目,它将自己描述为「一个允许你永久、可持续地存储数据的协议,只需要预付一笔费用。」它本质上是一个点对点 (P2P) 网络,但有自己的一套加密术语——它的采矿机制被称为「"随机访问的简洁证明(SPoRAs)",开发人员可以将应用程序部署到 "permaweb"("一个建立在 Arweave 之上的永久的去中心化网络」)。
更复杂的是,dapp 开发者可以选择使用「链外」解决方案,即数据存储在主区块链之外的其他地方。两种常见的形式是「侧链」(二级区块链) 和所谓的「第二层」(L2) 解决方案,如比特币闪电网络和以太坊 Plasma。更多关于如何在 Web3 中进行数据管理的信息,请查看数据 API 公司 Fauna 的 Shashank Golla 最近在 The New Stack 上发表的文章。
至于如何在区块链上索引和查询数据,这是一个相对较新的开发领域。但如上所述,Dabit 正在开发一种解决方案——由 GraphQL 驱动的 The Graph。除此之外,它还允许开发人员在应用程序中使用 GraphQL 直接从 L1 或 L2 链进行查询。
基于 Dabit 所描述的 Web3 堆栈,很明显,传统的网络编程技能——从 JavaScript 到 Rust——将在 Web3 开发中为你提供良好的帮助。但你还必须学会如何使用智能合约编程区块链,并适应加密文件存储和链下解决方案的陌生世界。
从开发者的角度来看,Web3 目前似乎处于过渡时期,试图找到摆脱对 Coinbase、OpenSea 和 Alchemy 等中心化服务依赖的方法。但这样做是所有复杂性的来源,因为真正的去中心化对于 dapps 来说是很难实现的。
我很好奇 Web3 堆栈在 2022 年以后会如何发展,因为它正在寻找方法来实现自己的去中心化宣传。与此同时,如果你想了解更多,请查看 Nader Dabit 的 Web3 开发者指南。去年 10 月,他在 Next.js Conf 上做了演讲,他在其中解释了堆栈。
原文链接
欢迎加入律动 BlockBeats 官方社群:
Telegram 订阅群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方账号:https://twitter.com/BlockBeatsAsia