Web3 技术堆栈开发人员指南
在 Alchemy,我们将 Web3 定义为基于区块链技术构建的去中心化互联网生态系统。
作为开发人员和建设者,我们首先了解去中心化通常会让人联想到支离破碎的技术堆栈。虽然 Web3 确实还处于初期阶段并且正在快速发展,但我们发现其支撑构建块已经开始形成。
为了更好地理解 Web3 和去中心化互联网的内部工作原理,让我们直接进入 Web3 开发堆栈。
Web3 堆栈概述
在高层次上,构建任何 Web3 应用程序都需要深入了解区块链网络、Web3 基础设施和 Web3 开发环境。
Web3 网络层
Web3 技术栈的基础是区块链网络层。虽然 Web2 应用程序依赖于集中式数据库,但 Web3 应用程序构建在区块链架构之上,以实现无信任和无许可的访问。
在选择用于构建去中心化应用程序 (dApp) 的区块链网络时,开发人员有两个主要选择:与以太坊虚拟机 (EVM) 兼容的区块链和与 EVM 不兼容的区块链。
EVM 区块链:
从历史上看,以太坊一直是 Web3 开发的主要框架,其虚拟环境(即以太坊虚拟机或 EVM)存储账户和余额等关键信息。以太坊的虚拟机还存储一个机器状态,它能够根据 EVM 制定的一组预定义规则随每个新块而变化。对于开发人员来说最重要的是,EVM 提供了一个用于存储和执行智能合约的框架,允许开发人员对链上逻辑进行编程。
随着以太坊区块链和 EVM 的兴起,许多旨在解决以太坊的可扩展性限制或昂贵的交易成本的不同网络都选择开发与 EVM 完全兼容的框架。这意味着 EVM 兼容链都共享运行智能合约的相同软件层——即 Solidity。
与 EVM 兼容的区块链允许开发人员利用专为 EVM 链构建的所有相同工具、文档和社区,从而节省时间和金钱。
EVM 区块链示例
- Ethereum – 原创 EVM 智能合约平台
- Polygon – 以太坊侧链
- Arbitrum – 使用乐观汇总和多轮欺诈证明的第 2 层区块链
- Optimism – 使用 Optimistic 汇总和单轮欺诈证明的第 2 层区块链
- Hermez – 由 Polygon 管理的 ZK 汇总以太坊第 2 层网络
- ZKSync – ZK rollup Ethereum Layer 2 network using SNARKs
- Starknet – ZK rollup Ethereum Layer 2 网络使用 STARKs
- Avalanche – EVM 兼容第 1 层
- Cronos – EVM 兼容的第 1 层
3 个最佳 Web3 开发环境
在选择构建 dApp 的区块链网络时,Web3 开发人员应考虑可用开发工具的深度和广度。幸运的是,与 EVM 兼容的链受益于多年的以太坊开发,并且在开发环境方面拥有大量久经沙场的选项。
1.安全帽
Hardhat是一个允许开发人员编译、测试、部署和调试以太坊软件的 javascript 软件开发环境,可以通过灵活的插件进行扩充,使开发人员能够轻松定制本地区块链开发环境,并附带强大的故障排除和调试文档集。
2. 松露
一套包含三种不同的基于 javascript 的开发人员工具——Truffle 、Ganache 和 Drizzle —— Truffle帮助构建者编译、测试和部署 EVM 代码,同时还为前端 dApp 开发提供工具。
- Truffle——主要的开发环境、测试框架和部署管道
- Ganache – 允许开发人员快速创建本地区块链
- Drizzle – 各种前端库,用于将前端组件与智能合约连接起来
3.布朗尼
作为基于 Python 的 EVM 开发框架,作为 Hardhat 或 Truffle 的替代品,Brownie提供了一整套主要基于web3.py包构建的 Web3 开发人员工具,用于编译、测试和部署 dApp。
非 EVM 区块链
最近,开发人员开始在不遵循以太坊框架的区块链上构建更多 dApp,因此与 EVM 不兼容。
非 EVM 网络工程师认为,EVM 链受以太坊框架的限制太大,而是选择通过设计新结构进行创新。通常,非 EVM 区块链从一开始就设计有数据和交易可扩展性,并允许每秒高交易量 (TPS)。
非 EVM 区块链示例
- Solana – 使用 Rust C、C++ 进行智能合约的第 1 层
- NEAR – 第 1 层使用 Rust 或 Assemblyscript 进行智能合约
- Terra – 使用 Rust 进行智能合约的第 1 层
- Astar – 将 Polkadot 生态系统连接到所有主要第 1 层区块链的平行链
非 EVM 区块链开发环境
虽然非 EVM 链的开发环境不太成熟,但一些网络已经开始带头为各自的链开发开发工具
Flow 使开发人员能够使用本机Visual Studio Code Extension测试 Cadence 智能合约的错误,这是最流行的 IDE(集成开发环境)之一。
非 EVM 开发环境的另一个示例是Anchor,它允许构建和测试 Solana 合约,具有与 Solidity 和 Truffle 类似的感觉。总体而言,Anchor 的环境降低了 Rust 和 Solana 开发的门槛。
我应该使用什么区块链网络?
由于各个区块链通常具有独特的架构和共识机制,因此它们将不可避免地针对特定用例比其他用例进行更好的优化。因此,我们坚信多链 Web3 的未来。
鉴于其可互操作工具的多样性不断增加,EVM 框架是一个极其丰富的环境。此外,EVM 兼容性为用户和开发人员等提供了更流畅的流程,通过跨链 dApp 移动流动性,并提供熟悉的用户和开发人员体验。对于早期开发人员和新协议,我们认为围绕与 EVM 兼容的区块链进行开发以利用现有工具、基础设施和开发人员文档是一个令人信服的论据。
话虽这么说,我们也认识到非 EVM 区块链对于更有经验的开发人员、他们不断增长的社区基础以及对早期开发人员的工具支持的增加开发的利基功能。
区块链交互层
选择区块链网络后,Web3 堆栈的下一步是区块链交互层。该层允许开发人员和用户向区块链读取和写入数据。
如果您不熟悉区块链的工作原理,请快速回顾一下。
- 区块链由数据块组成。
- 块存储在分布式节点上。
- 区块链中的每个节点都充当“迷你服务器”,允许其操作员读取/写入数据块。
- 添加到区块链的任何块都必须在网络上的所有节点之间传播才能同步。
在考虑 Web3 框架内的数据访问层时,请记住链上存储是标准,因为它本质上是不可变的,并且允许任何公众个人查看/验证它。
数据提供者,如区块浏览器,是区块链交互层的关键部分。对于初学者来说,它们提供了一个进入较低网络层的窗口,并作为一个在线资源,用于检索有关交易、地址余额、汽油费等的实时和历史数据。区块浏览器通常用于查找支付的关键细节、确定不同交易的状态或简单地了解区块链使用的总体趋势。数据提供者使公众能够阅读和解释区块链。
Web3 基础架构挑战
然而,如果没有适当的基础设施要求,访问区块链数据并与之交互可能会非常困难。
由于直接在链上写入数据不符合成本效益,Web3 开发人员使用 EVM 链的内置日志记录功能,以便智能合约可以通过 Solidity 事件以可搜索、经济高效的方式“打印”链上信息。虽然记录更便宜的存储并且是读取和写入区块链的最流行方式,但它需要一个强大的区块链交互层来确保开发人员能够在事件发生时捕获事件而不会失败。
运行节点与使用节点服务提供商
从历史上看,使用区块链交互层需要运行一个自托管、自维护的节点。这是一个昂贵且耗时的过程,仅运行一个以太坊节点平均每年花费 86,000 美元。开发人员没有构建协议和 dApp,而是发现自己将工程资源用于管理节点的错误、回归、磁盘问题、CPU 流量峰值等。
运行自己的节点的成本导致了 Alchemy 的创建。Alchemy 的核心是为开发人员公开了一套 API,以便在无需管理节点的情况下与区块链进行交互。
作为多链 Web3 的坚定支持者,Alchemy 的 API 套件提供跨第 1 层(包括以太坊网络)、第 2 层(包括 Arbitrum 和 Optimism)、侧链(包括 Polygon)以及非 EVM 兼容的 L1(例如 Solana 和 Astar)的多链支持,所有这些都在一个单一熟悉的 API 框架。
最终,Alchemy 允许区块链开发人员对整个 Web3 网络层进行可靠且可扩展的访问,从而使他们能够专注于构建 Web3 堆栈。
Web3 表示层
在许多方面,Web3 表示层密切反映了 Web2 开发的许多方面。
对于前端组件的创建和开发,许多开发人员求助于久经考验的 React.js 库。随着大量开发人员和 Web3 社区的追随,它已成为 Web3 前端的事实标准。
Web2 和 Web3 前端堆栈不同的一个领域是用于与区块链数据交互的特定库。
在与数据访问层交互时,Web3 dApp 倾向于使用Ethers.js 或 Web3.js,而不是更典型的 HTTP 请求库,如 Axios 和 Fetch。特别是,Ethers.js 和 Web3.js 本身都支持对托管在区块链交互层上的区块链节点进行远程过程调用 (RPC),从而能够更加无缝地集成到开发人员的 Web3 技术栈中,并向区块链读写数据。最近,Alchemy SDK 已成为 Ethers.js 的流行替代品,因为它方便且可以访问 Alchemy 的增强型 API。
如何在 Ethers.js 和 Web3.js 之间做出选择
这两个平台都将对区块链节点的复杂 JSON-RPC 请求转换为简单的单行方法,例如“getTransactionByHash()”或“getBlockNumber()”。
Web3.js 拥有最多的分叉/提交,并且是历史上最常用的以太坊 javascript 库。虽然它也被广泛使用,但它缺乏 Ethers 文档的广度和深度,可能不适合早期的 Web3 开发人员。
Ethers.js 是一个更轻量级、对开发人员友好的库,具有强大的文档。最近,它已经成为最受欢迎的 Web3 库,超过了 Web3.js。虽然许多早期开发人员和老手都通过Ethers.js开发了 dApp ,但它由少数人维护,限制了库的开发。
最后,Alchemy 发布了Ethers.js 的改进版本,称为 Alchemy SDK。Alchemy SDK 是 Ethers.js 功能的超集,保持所有相同的语法和功能,但增加了对 Alchemy 的增强 API 的支持,例如:
– NFT API:自定义端点允许您获取由所有者、合约等缓存的 NFT。
–增强的 Websockets:允许您接收针对特定用户的已开采或未决交易的推送通知。
– Alchemy Transact: 允许您发送执行速度提高 7.9 倍的强化交易,或绕过内存池的私人交易。
–令牌 API: 允许您搜索和过滤特定用户的令牌。
–通知 API: 每当区块链上发生特定活动时发送 Webhook 通知。
– Transfers API: 搜索数百万块以查找与特定模式匹配的传输。
去中心化存储
虽然区块链为去中心化状态管理、智能合约存储/执行和交易价值提供了一种媒介,但更高级别的应用程序需要额外的组件。对于图像、视频和 GIF 等前端内容,区块链存储非常昂贵且效率低下。去中心化存储填补了这一空白。
一种解决方案是星际文件系统或 IPFS,这是一种由节点组成的分布式网络,个人可以在这些节点上存储和共享文件、网站、应用程序和数据。随着 NFT 的兴起,IPFS 的使用量激增,经常作为 NFT 媒体资产的底层存储介质。
另一个流行的去中心化存储解决方案是 Arweave,它旨在激励个人永久存储数据。通过 Arweave 网络,矿工提供存储空间以换取代币,协议本身确保存储的数据在所有节点上保持正确和一致。
Web3 应用层
在 Web3 的背景下,应用层涵盖 DeFi、NFT、身份与认证、数据与分析以及许多其他令人兴奋的 dApp 类别。总之,这些去中心化的 Web3 应用程序包括一些最大的原生 Web3 公司,如 OpenSea、Uniswap 和 Aave。
作为开发人员,这通常是最有趣的构建层。不同的去中心化应用程序可以混合搭配在一起,将强大的原始元素组合成新的、复杂的产品。
应用层主要是让公众消费者(其中许多人可能不完全理解 Web3 开发的复杂性)轻松地与直观的前端进行交互。最终,用户友好的前端让公众能够在日常生活中利用去中心化的互联网。
从今天开始在 Web3 堆栈上构建
随着 Web3 从当前状态发展到成熟,肯定会有范式转变、新的 Web3 基础设施工具和大量需要学习的东西。考虑到 Web3 技术堆栈的不断变化,开始使用 Web3 技术堆栈进行开发似乎令人望而生畏,但 Web3 堆栈中定义的层将保留下来。
加入不断壮大的开发者运动——Web3 本地人和 Web2 的同路人——我们可以一起建设未来!