在构建 web3 的下一个部分中,Edge & Node的开发者关系工程师Nader Dabit进一步扩展了web3堆栈,并介绍了开发者如何理解构建web3的各个方面。
在担任传统全栈开发人员大约 10 年后,我于 2021 年 4 月过渡到 web3。在深入研究所有这些新技术和想法时,我想知道的第一件事是“什么是 web3 堆栈?”。
在构建传统的 Web 或移动应用程序时,我经常依赖一些构建块来完成工作。
使用这些核心组件,我可以构建大多数我想要的应用程序类型,或者至少可以实现大部分目标。那么这在 web3 中是什么样子的呢?
事实证明,这个问题的答案并不那么简单,因为:
对我来说,理解如何启动、运行和构建 web3 应用程序也更困难,因为我以与在 web2 世界中相同的方式处理问题。
经过过去 8 个月左右的工作、研究、实验和构建,我想分享我所学到的东西。
在定义 web3 堆栈之前,让我们尝试定义 web3。根据你问的人,web3 有无数的定义。但对我来说,我发现 这点 定义:
Web3 是支持完全去中心化应用程序的协议栈。
有了这个去中心化的技术堆栈,我们就可以开始构建具有自己的既定含义和特征的去中心化应用程序。
web3 启用的一些特性包括:
虽然一些基于去中心化技术堆栈构建的应用程序将取代其前身,但区块链启用的新原语也使新的应用程序范式成为可能。
原生数字支付和公共后端基础设施(例如机器学习、移动设备、虚拟现实和其他技术原语、平台和构建块)使得能够构建全新类型的应用程序,其中还有一些尚未被想象出来的应用程序。
这是否意味着一切都将被web3取代?不需要。虽然我确实认为,对于某些类型的应用程序来说,构建去中心化的技术堆栈是更好的选择—— 就像几乎所有技术决策一样,这取决于您正在构建的内容。
现在让我们开始深入研究 web3 堆栈,分为以下几类:
您可以选择在无数的区块链上进行构建。没有哪一个是“最好的”,相反,您应该考虑它们之间的各种权衡。
学习新事物时,有一件事对我来说常常很重要,那就是应用帕累托法则来学习。也就是说,如何以最高效的方式在有限的时间和精力内获得最大收益。遵循这个理念,我可以在最短的时间内以最低的努力获取最大的进展和动力。
在区块链世界中,学习 Solidity 和EVM (或以太坊虚拟机)可能是作为区块链开发人员开始时的最佳选择。使用此技能组(和技术堆栈),您不仅可以为以太坊构建,还可以为其他以太坊第 2 层、侧链,甚至其他区块链(如 Avalanche、Fantom 和 Celo)构建。
话虽如此,Rust 开始在区块链世界中变得越来越流行,Solana、NEAR、Polkadot 和其他公司都拥有一流的 Rust 支持。你的学习可能也不会出错,但对于初学者来说,如果今天有人问我,Solidity 仍然是更好的选择。
除了这些建议之外,这里还有一个不完整的区块链样本,它牢固地结合了技术、实用性、社区、动力和未来的可行性:
与网络交互时,您需要使用 RPC 端点。
有几种方法可以做到这一点:
公共 RPC 端点通常由网络提供,但对于大多数生产 dapp,您需要利用自己的端点,因为它们不稳定或不建议用于生产。
那里有一些 RPC 服务提供商,以下是一些:
还有一个web3/去中心化的解决方案,Pocket Network(袖珍网络) 这似乎正在获得关注。
这些选项中的任何一个都可能是直接与网络交互的不错选择。
对于 EVM 开发,有一些很好的开发环境可用:
对于 Solana 开发,Anchor 正在迅速成为新开发人员的切入点。它提供了一个用于搭建、构建和测试 Solana 程序的 CLI,以及可用于构建前端的客户端库。它还包括一个 DSL,它可以消除开发人员在开始使用 Solana 和 Rust 开发时经常遇到的许多复杂性。
我们在 web3 中的哪里存储图像、视频和其他文件?在链上存储如此大的东西通常会非常昂贵,所以我们可能不想将它们存储在那里。
相反,我们可以使用少数文件存储协议之一:
除了文件存储和链上存储之外,您可能还需要链下存储数据。您可以像在传统技术堆栈中使用数据库一样使用这些类型的解决方案,但它们是在去中心化网络上的 n 个节点上复制的,因此更可靠(至少在理论上)。
一些选项是:
就成熟度而言,我的看法是,链下存储解决方案的生态系统尚未达到构建某些开发人员可能想要的一些更高级用例所需的程度。这里的一些挑战是实时数据、冲突检测和冲突解决、写入授权、文档和一般开发人员经验。
在拥有能够支持任何类型应用程序的完全去中心化协议栈之前,将链下数据解决方案与区块链协议集成是我们需要跨越的最后一个大障碍之一。
我们与区块链交互和构建区块链的方式与传统技术堆栈中的数据库存在很多差异。使用区块链,数据不会以可以有效或轻松地直接从其他应用程序或前端使用的格式存储。
区块链针对写入操作进行了优化。您经常听到围绕每秒交易数、区块时间和交易成本进行的创新。区块链数据随着时间的推移被写入块中,使得除了基本读取操作之外的任何操作都是不可能的。
在大多数应用程序中,您需要关系数据、排序、过滤、全文搜索、分页和许多其他类型的查询功能等功能。为此,需要对数据进行索引和组织以实现高效检索。
传统上,这是数据库在集中式技术堆栈中所做的工作,但 web3 堆栈中缺少索引层。
The Graph 是一种用于索引和查询区块链数据的协议,它使这个过程变得更加容易,并为此提供了一个去中心化的解决方案。任何人都可以构建和发布开放的 GraphQL API(称为子图),使区块链数据易于查询。
要了解有关图表的更多信息,请查看文档这里 或者我的教程这里。
身份是 web3 中完全不同的范例。在 web2 中,身份验证几乎总是基于用户的个人信息。此信息通常通过表单或 OAuth 提供商收集,要求用户移交以换取对应用程序的访问权限。
在 web3 中,身份完全围绕钱包和公钥密码学。
虽然“钱包”这个名字达到了它的目的,但我发现刚接触 web3 的人发现这个术语令人困惑,因为它与身份验证和身份相关。我希望将来我们能够找到其他方式来表达钱包是什么,因为它结合了金融方面,还结合了身份和声誉。
作为开发人员,您需要了解如何以各种方式访问用户的钱包和地址并与之交互。
在非常基本的级别(也是一个非常常见的要求),您可能希望请求访问用户的钱包。为此,您通常可以在窗口上下文(网络浏览器)中访问用户的钱包或使用类似的东西钱包连接 或者Solana 的钱包适配器。
例如,如果他们有可用的以太坊钱包,您将能够访问 window.ethereum。 Solana (window.solana)、Arweave (window.arweaveWallet) 和其他一些也是如此。 WalletConnect 非常适合移动网络和 React Native,因为它允许用户直接从设备授权使用他们的移动钱包。
如果您想自己处理身份验证,您可以允许用户签署交易,然后在某处对其进行解码以对用户进行身份验证,但这通常需要服务器。这里 是使用 EVM 钱包的示例,以及这里 是如何使用 Solana / Phantom 执行此操作的示例。
以去中心化的方式管理用户个人资料怎么样? Ceramic Network 提供最强大的协议和工具套件来管理去中心化身份。他们最近发布了一篇博文 概述了他们的一些最新更新,并就所有工具如何协同工作提供了一些指导。我会从那里开始然后探索他们的文档 了解如何开始构建,并考虑查看我的示例项目这里 使用陶瓷的自我编号。
如果你想获取用户的ENS 文本记录,@ensdomains/ensjs">ENSJS提供了一个很好的 API 来获取用户数据:
const ens = new ENS({ 提供商, ensAddress: getEnsAddress(‘1’) })
const content = wait ens.name(‘sha.eth’).getText(‘avatar’)
SpruceID 这也是看起来很有希望但我还没有尝试过的东西。
Ceramic和Spruce 两者都实现了W3C 确实 (W3C DID) 规范,我认为它本身也是 web3 的构建块。话虽如此,DID 的任何集中式实施都违背了规范试图实现的目标。
就 JavaScript 框架而言,您实际上可以使用任何您想要的东西进行构建,因为客户端区块链 SDK 大多与框架无关。话虽如此,大量的项目和示例都是在 React 中构建的。还有一些图书馆,例如Solana 钱包适配器 为 React 提供了额外的实用程序,所以我想说学习或熟悉 React 可能是一个明智之举。
对于以太坊中的客户端 SDK,有web3.js 和以太坊.js。对我来说,尽管 web3.js 存在的时间更长,但 Ethers 更平易近人,并且有更好的文档。
在 Solana,您可能会与@solana/web3.js 和/或锚。我发现 Anchor 客户端库是我构建 Solana 程序的首选,因为无论如何我都在使用 Anchor 框架,而且我发现它更容易理解@solana/web3.js。
预言机允许开发人员从智能合约中读取真实世界的数据和外部系统。
例如,大多数金融应用程序都需要了解链下发生的真实数据和事件,因此预言机在 DeFi 中尤其重要。
Chainlink 是一个预言机,可以访问现实世界的数据和链下计算,同时保持区块链技术固有的安全性和可靠性保证。
Flux 是一个跨链预言机,为智能合约提供经济安全的数据源访问权限。
Radicle 是一个基于 Git 的去中心化代码协作协议。它可以被认为是 GitHub 的去中心化版本。
Livepeer 是一个去中心化的视频流网络。它已经成熟并被广泛使用,网络上有超过 70,000 个 GPU。
这篇文章将成为我在学习、实验和收集 web3 开发人员反馈时不断关注的动态文档。
如果您对我在这里缺少的内容有任何反馈或想法,请与我联系并分享您的想法。看到开发人员纷纷加入并参与其中,围绕 web3 发生的所有活动令人兴奋。虽然基础设施仍在不断发展,但构建真正去中心化的协议和应用程序的愿景非常重要,这些协议和应用程序允许人们进行协调,而无需将权力和控制权交给大公司,我们即将使这一愿景成为现实。
在构建 web3 的下一个部分中,Edge & Node的开发者关系工程师Nader Dabit进一步扩展了web3堆栈,并介绍了开发者如何理解构建web3的各个方面。
在担任传统全栈开发人员大约 10 年后,我于 2021 年 4 月过渡到 web3。在深入研究所有这些新技术和想法时,我想知道的第一件事是“什么是 web3 堆栈?”。
在构建传统的 Web 或移动应用程序时,我经常依赖一些构建块来完成工作。
使用这些核心组件,我可以构建大多数我想要的应用程序类型,或者至少可以实现大部分目标。那么这在 web3 中是什么样子的呢?
事实证明,这个问题的答案并不那么简单,因为:
对我来说,理解如何启动、运行和构建 web3 应用程序也更困难,因为我以与在 web2 世界中相同的方式处理问题。
经过过去 8 个月左右的工作、研究、实验和构建,我想分享我所学到的东西。
在定义 web3 堆栈之前,让我们尝试定义 web3。根据你问的人,web3 有无数的定义。但对我来说,我发现 这点 定义:
Web3 是支持完全去中心化应用程序的协议栈。
有了这个去中心化的技术堆栈,我们就可以开始构建具有自己的既定含义和特征的去中心化应用程序。
web3 启用的一些特性包括:
虽然一些基于去中心化技术堆栈构建的应用程序将取代其前身,但区块链启用的新原语也使新的应用程序范式成为可能。
原生数字支付和公共后端基础设施(例如机器学习、移动设备、虚拟现实和其他技术原语、平台和构建块)使得能够构建全新类型的应用程序,其中还有一些尚未被想象出来的应用程序。
这是否意味着一切都将被web3取代?不需要。虽然我确实认为,对于某些类型的应用程序来说,构建去中心化的技术堆栈是更好的选择—— 就像几乎所有技术决策一样,这取决于您正在构建的内容。
现在让我们开始深入研究 web3 堆栈,分为以下几类:
您可以选择在无数的区块链上进行构建。没有哪一个是“最好的”,相反,您应该考虑它们之间的各种权衡。
学习新事物时,有一件事对我来说常常很重要,那就是应用帕累托法则来学习。也就是说,如何以最高效的方式在有限的时间和精力内获得最大收益。遵循这个理念,我可以在最短的时间内以最低的努力获取最大的进展和动力。
在区块链世界中,学习 Solidity 和EVM (或以太坊虚拟机)可能是作为区块链开发人员开始时的最佳选择。使用此技能组(和技术堆栈),您不仅可以为以太坊构建,还可以为其他以太坊第 2 层、侧链,甚至其他区块链(如 Avalanche、Fantom 和 Celo)构建。
话虽如此,Rust 开始在区块链世界中变得越来越流行,Solana、NEAR、Polkadot 和其他公司都拥有一流的 Rust 支持。你的学习可能也不会出错,但对于初学者来说,如果今天有人问我,Solidity 仍然是更好的选择。
除了这些建议之外,这里还有一个不完整的区块链样本,它牢固地结合了技术、实用性、社区、动力和未来的可行性:
与网络交互时,您需要使用 RPC 端点。
有几种方法可以做到这一点:
公共 RPC 端点通常由网络提供,但对于大多数生产 dapp,您需要利用自己的端点,因为它们不稳定或不建议用于生产。
那里有一些 RPC 服务提供商,以下是一些:
还有一个web3/去中心化的解决方案,Pocket Network(袖珍网络) 这似乎正在获得关注。
这些选项中的任何一个都可能是直接与网络交互的不错选择。
对于 EVM 开发,有一些很好的开发环境可用:
对于 Solana 开发,Anchor 正在迅速成为新开发人员的切入点。它提供了一个用于搭建、构建和测试 Solana 程序的 CLI,以及可用于构建前端的客户端库。它还包括一个 DSL,它可以消除开发人员在开始使用 Solana 和 Rust 开发时经常遇到的许多复杂性。
我们在 web3 中的哪里存储图像、视频和其他文件?在链上存储如此大的东西通常会非常昂贵,所以我们可能不想将它们存储在那里。
相反,我们可以使用少数文件存储协议之一:
除了文件存储和链上存储之外,您可能还需要链下存储数据。您可以像在传统技术堆栈中使用数据库一样使用这些类型的解决方案,但它们是在去中心化网络上的 n 个节点上复制的,因此更可靠(至少在理论上)。
一些选项是:
就成熟度而言,我的看法是,链下存储解决方案的生态系统尚未达到构建某些开发人员可能想要的一些更高级用例所需的程度。这里的一些挑战是实时数据、冲突检测和冲突解决、写入授权、文档和一般开发人员经验。
在拥有能够支持任何类型应用程序的完全去中心化协议栈之前,将链下数据解决方案与区块链协议集成是我们需要跨越的最后一个大障碍之一。
我们与区块链交互和构建区块链的方式与传统技术堆栈中的数据库存在很多差异。使用区块链,数据不会以可以有效或轻松地直接从其他应用程序或前端使用的格式存储。
区块链针对写入操作进行了优化。您经常听到围绕每秒交易数、区块时间和交易成本进行的创新。区块链数据随着时间的推移被写入块中,使得除了基本读取操作之外的任何操作都是不可能的。
在大多数应用程序中,您需要关系数据、排序、过滤、全文搜索、分页和许多其他类型的查询功能等功能。为此,需要对数据进行索引和组织以实现高效检索。
传统上,这是数据库在集中式技术堆栈中所做的工作,但 web3 堆栈中缺少索引层。
The Graph 是一种用于索引和查询区块链数据的协议,它使这个过程变得更加容易,并为此提供了一个去中心化的解决方案。任何人都可以构建和发布开放的 GraphQL API(称为子图),使区块链数据易于查询。
要了解有关图表的更多信息,请查看文档这里 或者我的教程这里。
身份是 web3 中完全不同的范例。在 web2 中,身份验证几乎总是基于用户的个人信息。此信息通常通过表单或 OAuth 提供商收集,要求用户移交以换取对应用程序的访问权限。
在 web3 中,身份完全围绕钱包和公钥密码学。
虽然“钱包”这个名字达到了它的目的,但我发现刚接触 web3 的人发现这个术语令人困惑,因为它与身份验证和身份相关。我希望将来我们能够找到其他方式来表达钱包是什么,因为它结合了金融方面,还结合了身份和声誉。
作为开发人员,您需要了解如何以各种方式访问用户的钱包和地址并与之交互。
在非常基本的级别(也是一个非常常见的要求),您可能希望请求访问用户的钱包。为此,您通常可以在窗口上下文(网络浏览器)中访问用户的钱包或使用类似的东西钱包连接 或者Solana 的钱包适配器。
例如,如果他们有可用的以太坊钱包,您将能够访问 window.ethereum。 Solana (window.solana)、Arweave (window.arweaveWallet) 和其他一些也是如此。 WalletConnect 非常适合移动网络和 React Native,因为它允许用户直接从设备授权使用他们的移动钱包。
如果您想自己处理身份验证,您可以允许用户签署交易,然后在某处对其进行解码以对用户进行身份验证,但这通常需要服务器。这里 是使用 EVM 钱包的示例,以及这里 是如何使用 Solana / Phantom 执行此操作的示例。
以去中心化的方式管理用户个人资料怎么样? Ceramic Network 提供最强大的协议和工具套件来管理去中心化身份。他们最近发布了一篇博文 概述了他们的一些最新更新,并就所有工具如何协同工作提供了一些指导。我会从那里开始然后探索他们的文档 了解如何开始构建,并考虑查看我的示例项目这里 使用陶瓷的自我编号。
如果你想获取用户的ENS 文本记录,@ensdomains/ensjs">ENSJS提供了一个很好的 API 来获取用户数据:
const ens = new ENS({ 提供商, ensAddress: getEnsAddress(‘1’) })
const content = wait ens.name(‘sha.eth’).getText(‘avatar’)
SpruceID 这也是看起来很有希望但我还没有尝试过的东西。
Ceramic和Spruce 两者都实现了W3C 确实 (W3C DID) 规范,我认为它本身也是 web3 的构建块。话虽如此,DID 的任何集中式实施都违背了规范试图实现的目标。
就 JavaScript 框架而言,您实际上可以使用任何您想要的东西进行构建,因为客户端区块链 SDK 大多与框架无关。话虽如此,大量的项目和示例都是在 React 中构建的。还有一些图书馆,例如Solana 钱包适配器 为 React 提供了额外的实用程序,所以我想说学习或熟悉 React 可能是一个明智之举。
对于以太坊中的客户端 SDK,有web3.js 和以太坊.js。对我来说,尽管 web3.js 存在的时间更长,但 Ethers 更平易近人,并且有更好的文档。
在 Solana,您可能会与@solana/web3.js 和/或锚。我发现 Anchor 客户端库是我构建 Solana 程序的首选,因为无论如何我都在使用 Anchor 框架,而且我发现它更容易理解@solana/web3.js。
预言机允许开发人员从智能合约中读取真实世界的数据和外部系统。
例如,大多数金融应用程序都需要了解链下发生的真实数据和事件,因此预言机在 DeFi 中尤其重要。
Chainlink 是一个预言机,可以访问现实世界的数据和链下计算,同时保持区块链技术固有的安全性和可靠性保证。
Flux 是一个跨链预言机,为智能合约提供经济安全的数据源访问权限。
Radicle 是一个基于 Git 的去中心化代码协作协议。它可以被认为是 GitHub 的去中心化版本。
Livepeer 是一个去中心化的视频流网络。它已经成熟并被广泛使用,网络上有超过 70,000 个 GPU。
这篇文章将成为我在学习、实验和收集 web3 开发人员反馈时不断关注的动态文档。
如果您对我在这里缺少的内容有任何反馈或想法,请与我联系并分享您的想法。看到开发人员纷纷加入并参与其中,围绕 web3 发生的所有活动令人兴奋。虽然基础设施仍在不断发展,但构建真正去中心化的协议和应用程序的愿景非常重要,这些协议和应用程序允许人们进行协调,而无需将权力和控制权交给大公司,我们即将使这一愿景成为现实。