构建 Web3 应用需要使用到哪些技术栈?
- 原文:https://edgeandnode.com/blog/defining-the-web3-stack
- 译文出自:登链翻译计划
- 译者:翻译小组
- 校对:Tiny 熊
- 本文永久链接:learnblockchain.cn/article…
想在web3上进行构建应用吗?Nader Dabit 在一份介绍性指南中定义了web3技术栈的构建基础模块,一起来看看。
我在2021年4月过渡到web3,此前我做了大约10年的传统全栈开发者。在潜心研究所有这些新技术和想法时,我想知道的第一件事是 "什么是web3技术栈?"。
编者注:本文中的我 , 是Edge & Node开发者关系工程师Nader Dabit。
当创建一个传统的网络或移动应用程序时,我经常依赖于少数几个构建模块来完成工作:
使用这些核心组件,我可以建立我想建立的大多数类型的应用程序,或者至少可以达到大部分的目的。那么,在web3中是什么样子的呢?
事实证明,这个问题的答案并不那么简单,因为。
对我来说,要理解如何启动和运行web3应用程序并建立起来也比较困难,因为我是以与web2世界相同的方式来处理问题的。
在过去8个月左右的时间里,经过工作、研究、实验和建设,我想分享我所学到的东西。
在我们定义web3栈之前,让我们先尝试定义web3。有无数的定义,这取决于你问谁,但对我来说,我发现这个定义很准确:Web3是实现完全去中心化应用的协议栈。
有了这个去中心化的技术栈,我们就可以开始建立去中心化的应用,这些应用有其自身的影响和特点。
web3实现的一些特点是:
虽然一些建立在去中心化技术堆栈上的应用程序将取代它们的前身,但区块链所带来的新基元也使新的应用程序范式成为可能。
原生的数字支付和公共后端基础设施--如机器学习、移动设备、虚拟现实和其他技术基元、平台和构建模块--使全新类型的应用程序得以建立,有些是尚未想象到的。
这是否意味着一切都将被web3取代?不一定。虽然我认为对于某些类型的应用来说,建立在分散的技术堆栈上是一个更好的选择--就像几乎所有的技术选择一样,这取决于你在建立什么。
现在让我们开始深入研究web3堆栈,他们分类为:
有无数的区块链,你可以选择在其上建立。没有一个是 "最好的",相反,你应该考虑它们之间的各种权衡。
在学习新东西时,有一件事对我来说常常很重要,那就是将帕累托原则应用于我正在学习的东西。也就是说,什么是最有效的方式来获得同样时间和精力的最大收益。遵循这个想法,我可以在最短的时间内获得最大的牵引和动力,同时学习新事物。
在区块链领域,学习Solidity和EVM(以太坊虚拟机)可能是作为区块链开发者起步时的最佳选择。使用这种技能(和技术栈),你不仅可以为以太坊,而且可以在其他以太坊第二层、侧链,甚至其他区块链(如Avalanche、Fantom和Celo)上构建。
另外,Rust在区块链领域开始变得越来越流行,Solana、NEAR、Polkadot等都有一流的Rust支持。你学习这两种语言可能都不会出错,但对于初学者来说,如果今天有人问我,我会说Solidity仍将是更好的选择。
除了这些建议,这里有一个不完整的区块链样本,它们是在技术、实用性、社区、发展势头和未来的可行性方面的一个组合:
对于EVM的开发,有几个好的开发环境可以使用:
对于Solana的开发,Anchor正迅速成为新开发者的入口。它提供了一个CLI,用于构建和测试Solana程序的脚手架,以及你可以用来构建前端的客户端库。它还包括一个DSL,可以抽象出开发人员在开始使用Solana和Rust开发时经常遇到的许多复杂问题。
我们在web3中把图片、视频和其他文件存储在哪里?在区块链上存储这么大的文件通常是非常昂贵的,所以我们可能不想把它们存储在那里。
但是,我们可以有几个文件存储协议可以选择:
IPFS : 点对点文件系统协议
除了文件存储和链上存储之外,你可能还需要在链外存储数据。你可能会使用这些类型的解决方案,类似于你在传统技术堆栈中使用数据库的方式,但相反,它们是在分布的网络上的N个节点上复制的,因此更可靠(至少在理论上)。
几个选择是:
就成熟度而言,我的看法是,链外存储解决方案的生态系统还没有达到建立一些开发者可能想要的更高级用例所需要的程度。这里的一些挑战是实时数据、冲突检测和冲突解决、写入授权、文档和一般开发者经验。
将链外数据解决方案与区块链协议相结合,是我们在拥有能够支持任何类型应用的完全去中心化协议栈之前需要跨越的最后一个大障碍之一。
我们与区块链互动和在区块链之上构建的方式与传统技术栈中的数据库有很多不同。对于区块链,数据不是以一种可以有效或容易地直接从其他应用程序或前端消费的格式存储的。
区块链是为写操作而优化的。你经常听到以每秒交易量、区块时间和交易成本为中心的创新。区块链数据在一段时间内以区块形式写入,使得除了基本的读取操作外,其他的都不可能。
在大多数应用中,你需要像关系型数据、排序、过滤、全文搜索、分页和许多其他类型的查询功能。为了做到这一点,需要对数据进行索引和组织,以便有效地进行检索。
传统上,这就是数据库在集中式技术栈中所做的工作,但在web3栈中缺少索引层。
The Graph是一个用于索引和查询区块链数据的协议,使这一过程变得更加容易,并为此提供了一个去中心化的解决方案。任何人都可以建立和发布开放的GraphQL APIs,称为子图,使区块链数据易于查询。
要了解更多关于The Graph的信息,请查看文档这里或我的教程这里。
在web3中,身份认证是一个完全不同的范式。在web2中,认证几乎总是基于用户的个人信息。这些信息通常是通过表单或OAuth提供者收集的,要求用户交出这些信息以换取对应用程序的访问。
在web3中,身份识别完全围绕着钱包和 公钥密码学 的概念。
虽然 "钱包 "这个名字有它的作用,但我发现刚接触web3的人觉得这个术语与认证和身份有关,令人困惑。我希望在未来我们能找出一些其他的方式来表达钱包是什么,因为它结合了金融以及身份和信誉的各个方面。
作为一个开发者,你将需要了解如何以各种方式访问用户的钱包和地址并与之互动。
在一个非常基本的层面上(也是一个非常常见的要求),你可能想请求访问用户的钱包。要做到这一点,你通常能够在网络浏览器中访问用户的钱包,或者使用类似WalletConnect或Solana的钱包适配器的东西。
例如,如果他们有一个可用的Ethereum钱包,你将能够访问window.ethereum。对于Solana(window.solana)、Arweave(window.arweaveWallet)和其他少数几个也是如此。WalletConnect很适合移动网络和React Native,因为它允许用户直接从设备上使用他们的移动钱包进行授权。
如果你想自己处理认证,你可以让用户签署交易,然后在某处解码以认证用户,但这通常需要一个服务器。这里是一个使用EVM钱包的例子,这里是一个使用Solana / Phantom的例子,如何做到这一点。
那么以去中心化的方式管理用户档案呢?Ceramic Network为管理去中心化的身份提供了最强大的协议和工具套件。他们最近发布了一篇博文,概述了他们最近的一些更新,并给出了一些关于所有工具如何协同工作的指南。我会从那里开始,然后探索他们的文档以获得对如何开始构建的理解,并考虑查看我的例子项目这里,该项目使用Ceramic self.id。
如果你想获取用户的ENS文本记录,ensjs
库为获取用户数据提供了一个不错的API。
const ens = new ENS({ provider, ensAddress: getEnsAddress('1') })
const content = await ens.name('sha.eth').getText('avatar')
SpruceID也是一个看起来很有希望的东西,但我还没有试过。
Ceramic和Spruce都实现了W3C DID的规范,这本身也是我认为是web3的一个构件,任何DID的中心化实现都违背了规范所要实现的理念。
就JavaScript框架而言,你真的可以用任何你想要的东西来构建,因为客户端的区块链SDK大多是框架无关的。当前的情况,绝大多数的项目和例子都是用React构建的。还有一些库,如Solana Wallet Adapter,为React提供额外的工具,所以我说,学习或熟悉React可能是一个明智之举。
对于以太坊的客户端SDK,有web3.js 和ethers.js。对我来说,Ethers更平易近人,有更好的文档,尽管web3.js存在的时间更长。
在Solana中,你可能会使用@solana/web3.js 和/或Anchor。我发现Anchor客户端库是我构建Solana程序的首选,因为我反正也在使用Anchor框架,而且我发现它比@solana/web3.js
更容易理解。
Radicle是一个建立在Git上的去中心化的代码协作协议。它可以被认为是GitHub的一个去中心化版本。
Livepeer 是一个去中心化的视频流媒体网络。它是成熟的,并被广泛使用,网络上有超过70,000个GPU。
Chainlink是一个预言机,能够访问真实世界的数据和链外计算,同时保持区块链技术固有的安全性和可靠性保障。
这篇文章将尽量保持更新,随着我的学习、实验和收集来自web3中构建的开发者的反馈,我将不断地更新。
如果你有任何反馈或关于我在这里遗漏的想法,请联系并与我分享你的想法。看到围绕web3发生的所有活动,让人兴奋不已,因为开发者们正在跃跃欲试地参与进来。虽然基础设施仍在不断发展,但建立真正的去中心化协议和应用程序的愿景是非常重要的,它允许人们协调,而不必将权力和控制权交给大公司,我们正在接近实现这一愿景。
我在构建web3应用文章中,阐述了如何使用 web3堆栈进行开发。
本翻译由 Duet Protocol 赞助支持。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!