天天快消息!Web2与Web3开发的不同之处
Web2是引入交互功能的第二代互联网,也是我们今天所熟悉的。随着Web的不断发展,第三代互联网,也被称为Web3,正处于积极开发中。Web3引入了在区块链上运行的去中心化和无需许可的系统。但是Web2和Web3开发之间有什么区别呢?这对于从Web2转变到Web3的开发者是个契机,不仅可以为这一领先的技术做出贡献,而且能够走在创新的前沿。
1、什么是区块链?
区块链系统本质上是一个“状态机”,记载所有的交易记录。任何人都可以使用,并由与其连接的节点分发。通过将状态机分布在多个节点上,任何单个实体都无法支配或操纵网络。因此,当区块被添加到区块链中后,区块中的数据则无法更改。区块按时间顺序链接在一起,并由唯一的哈希值标识,该哈希值取决于先前区块的哈希值,因此称为区块链。
2、开发者从Web2到Web3的转变
作为Web2开发者,从Web2转变到Web3领域并熟悉区块链技术可能是一项艰巨的任务。Web2开发者需要了解两者的主要区别之一是Web3应用程序的架构,也称为dApp或去中心化应用程序。比较之下,Web2和Web3的架构有很大不同,因为Web3的主要理念是去中心化,而区块链是其支柱。从开发者的角度来看,这在很大程度上意味着不依赖任何中心化实体,例如服务器或数据库。
(资料图)
本文旨在帮助开发者快速了解Web2与Web3在架构上的一些根本差异,并解析Web3堆栈,以帮助正在进入Web3领域的开发者建立预期。
3、Web2架构
在技术层面上,Web2架构通常涉及以下三个组件:前端、后端和数据库。前端是支持用户交互、请求和接收来自后端(有时是API)数据的部分。后端是一个中心化的服务器,接收来自前端的请求,从数据库中获取数据,并将响应送回前端进行展示。所有数据都存储在数据库中,数据库也是一个中心化的实体。
我们以Twitter这个内容共享平台为例。Twitter有一个前端,允许用户查看内容和发布他们自己的内容。Twitter的后端逻辑定义发出用户请求(例如发布新内容)时所发生的情况。 最后,Twitter的数据库存储用户的内容。请注意,在此示例中,Twitter拥有用户与之交互的所有不同元素。
4、Web2的优缺点
由于Web3仍处于快速发展阶段,Web2有许多优势值得强调,包括无缝的用户体验和可访问性。 用户界面完全模糊了网站交互的复杂性。
就Twitter而言,您可以不停地滚动浏览内容,也可以通过点击几个按钮上传自己的内容。但是这个过程在Web3中并不那么简单。在撰写此博客时,执行类似请求需要额外的步骤和代码。
另一方面,Web2也有一些缺点,包括安全性和可靠性。对于中心化服务器而言,会存在单点故障的问题,因为服务器容易中断并且是数据泄露的目标对象。
在使用Twitter时,平台可能会遭到黑客攻击,您的帐户信息可能会发生泄露或被恶意使用的情况。此外,为Twitter提供支持的服务器随时可能出现故障。在Web3中发生这种情况的可能性很小,因为没有中心,网络分布在很多节点上。即使大多数节点同时受到影响,网络仍然可以正常运行。
5、Web3架构
在去中心化的环境中,参与者彼此不认识,需要一种无需信任的共识机制来提供单一的真实来源,并确保没有参与者作弊。
一般来说,区块链可以通过密码学和博弈论的结合保持去中心化和无需信任。密码学提供安全性,博弈论模型设计经济激励措施以促成期望产出。结合安全和激励机制为构建强大的去中心化网络奠定了基础,在该网络中,应用程序可以构建在无需信任的环境之上。
此外,建立在区块链之上的去中心化应用程序通常遵循与区块链本身类似的方法,其中同质化Token在去中心化基础设施中提供可持续性和所有权机制,我们将在后续展开讨论通证化的内容。
后端架构
在Web3开发中,架构大相径庭,主要原因在于去中心化,其消除了中心化后端和数据库的需求。在去中心化应用程序中,智能合约可以被视为通过特定语言编写的程序,其中包括逻辑,如同它们是应用程序的后端。智能合约将被部署至区块链并在其上运行,所有的代码和变量都存储在其中。我们再回到Twitter的示例,在发起请求以发布新内容时,智能合约将为要发生的情况进行定义。
成功部署到区块链后,合约可以通过其地址进行唯一标识和访问。地址是唯一的字符串,用于标识特定账户所处的位置。账户可以是智能合约或外部拥有账户(EOA),两者均可以持有余额并与智能合约交互。两者之间的主要区别在于EOA由用户控制,而智能合约由代码控制。我们将在后续部分展开讲解。
要在Web3版本的Twitter上发布新内容,用户需要将交易连同一些数据发送到Twitter的智能合约地址,以通知智能合约需要执行什么功能以及要发布的数据。
在Web2领域中,交易通常被认为是两方或多方之间的交换或交互。 该基本概念也同样适用于Web3。交易定义了需要采取的行动和相关方等。此外,交易可以发生在两个EOA之间或EOA和智能合约之间。
区块链和EVM如何将应用程序带入Web3
区块链上的每个区块都是由交易组成的,但交易必须由以太坊虚拟机(EVM)执行才能被包含在区块内。EVM可以被当作是在区块链之上运行的全局可用软件。它的主要目的是执行用户和智能合约之间的交易,并计算这些交互产生的新状态。新的计算状态是新的区块的基础。
由于Moonbeam实现了EVM,因此它是一个完全兼容以太坊的区块链和智能合约平台。这使开发者能够像与以太坊交互一样与Moonbeam交互,并使用来自以太坊生态系统的熟悉且好用的工具。
在以太坊和以太坊兼容的区块链(例如Moonbeam)中,智能合约是针对EVM的语言进行编写,例如Solidity和Vyper。为了让EVM理解Solidity等智能合约语言,Solidity代码必须先编译成字节码才能让EVM执行。其运作方式与React中的TypeScript代码或JSX相似,代码被编译成JavaScript以供浏览器呈现。字节码包含程序的所有逻辑,存储在部署时计算的给定地址。当用户与智能合约交互时,将会发送交易给合约的地址。该交易包含EVM在程序执行后计算新结果状态所需的所有指令。
与很多Web2开发环境一样,Web3有很多工具可以帮助开发者编写智能合约、部署合约、创建测试等。您可以使用Remix等集成开发环境或Hardhat或Foundry等开发框架。这些工具的目标是帮助创建部署工作流程,简化Web3开发人员调试、测试和与智能合约交互的操作流程。
总结来说,后端架构由智能合约(程序)组成,其被编译为字节码,由EVM(全局软件)进行执行,并存储在区块链(去中心化数据库)上的唯一地址中。
前端架构
现在我们已经了解了后端,那么一起来看看前端是如何与智能合约通信的。
Web3应用程序的前端与Web2应用程序相似,其显示数据并支持用户交互。但是,从区块链请求数据和向区块链提交数据的方式各不相同。因为,Web3版本的Twitter可能与Web2版本的外观相同,但向平台提交内容的过程可能会有所不同。
从前端检索链上数据
由于区块链分布在多个节点上,每个节点均有状态记录,其中包括智能合约数据和部署至区块链的代码。您将查询众多中心化节点中的其中一个节点(这些节点通常被成为提供商),而不是像Web2中一样从前端查询中心化服务器或API。以Moonbeam为例,您可以启动自己的节点或使用第三方提供商,如OnFinality或任何Moonbeam上支持的端点提供商。启动自己的节点可能会出现标准笔记本无法处理的设备要求。第三方提供商配备了运行节点所需的基础设施,为您提供快速且可靠的访问。在Web3开发中,可以通过HTTP和/或WSS端点访问提供商,类似于Web2中的API提供商。
每个节点可以通过特定于区块链的JSON-RPC API进行交互,该API定义了可以用于区块链交互的数据结构和方法的标准。底层协议与Web2领域中找到的JSON-RPC协议相同。如果您熟悉JSON-RPC,其基本用途与其他API协议(如REST或GraphQL)相同,能够通过请求和响应周期实现通信。Web2与Web3协议之间的区别在于以太坊JSON-RPC为EVM兼容链实现的API。
像Ethers.js、Web3.js和Web3.py等以太坊库充当JSON RPC API上的包装器。通过这些库,您可以轻松连接到JSON-RPC HTTP端点并调用任何JSON-RPC函数。在Web2领域中,这些库能够与用于JSON-RPC的Jayson或用于REST的Axios相媲美。得益于Moonbeam的以太坊兼容性,您可以使用任何以太坊库连接到提供商并使用熟悉的语言发起JSON RPC请求以获取链上数据。
为了读取链上数据,您的前端将包含使用连接到提供商的Web3开发库的逻辑,这将在之后用于从区块链请求数据并处理响应。
举例而言,您要在Twitter上查看包含特定标签的帖子。在Web2中,前端将向后端发起特定标签的请求,通常使用库来处理请求和响应。后端会从数据库检索相关联的帖子并将响应返回至前端,其中会显示包含给定标签的帖子。而在Web3中,前端会通过提供商向Twitter的智能合约发起请求,通常使用以太坊库处理请求并响应。 提供商将从区块链中检索帖子,此过程不涉及任何交易。只有在需要更新区块链状态时才会有交易产生。
请注意,根据查询的类型,您可能需要研究索引解决方案以提高效率。另外,您可能也需要研究存储解决方案。举例而言,您可以将视频和图片更新至Twitter,然而,将这些类型的条目存储在区块链上的费用是相当昂贵且不切实际。我们将在后面的部分展开讨论此话题。
从前端提交链上数据
要在链上提交数据,您需要发送一笔交易,以修改区块链状态并将其提供给区块链上的所有节点。在执行操作之前,您要创建一个账户。如前所述,账户类型有两种:外部拥有账户(EOA)和智能合约。要发起一笔交易,账户必须为EOA。智能合约只能发送以响应收到的交易。
EOA由唯一的密钥对组成,包含公钥和私钥。公钥类似于电子邮件地址,可公开共享。私钥类似于密码,用于对交易进行加密签名,区块链验证这些交易是否与您的公钥匹配。请注意,私钥应保持私密状态,请勿将其共享于他人。如果将私钥共享于他人,则其他用户可以直接访问您的账户和资金以代表您发送交易。
在Web2中,您将使用电子邮件地址和密码登录Twitter,然后可以在Twitter上自由发布新内容。 该流程在Web2和Web3 中是不同的。在Web3版本的Twitter中,你无需登录平台,但当你发布新内容时,你需要签署交易以将新内容提交到链上。这使您能够直接控制改变状态。
发送交易时,您还需要有资金用于支付交易费(即gas费)才能提交交易请求。gas费类似于信用卡手续费,即执行交易所需的资金金额。gas费能够防止网络过载的情况,并可用于为区块链的共识模型提供动力。
签署交易需要用到签名者。签名者使用私钥创建必要的加密签名来发送交易。如MetaMask等钱包通常用于管理资金和私钥,以便轻松发送交易。钱包可以充当签名者和提供者,因为除了签署交易之外,它们还可以提供与区块链上节点的连接。钱包主要分为两大类:热钱包和冷钱包。热钱包通常与互联网保持连接,因此安全性低,但提供较好的用户体验。而冷钱包在离线环境中存储密钥并签署交易,相对来说安全性高,然而随之而来的是用户体验较为困难,用户必须执行多个步骤才能发送交易。
要在Web3的Twitter中发布新内容,交易将在前端初始化,系统会提示您使用签名者签署交易。 该交易包括调用负责发布新内容的智能合约功能的指令,以传递要发布的内容。交易签署成功后,则会提交给提供商,由提供商提出请求。EVM将执行请求,并将交易添加到区块链上的最新区块中。
索引解决方案
如上所述,您可能需要根据查询类型使用索引器提高查询效率。返回Twitter示例,索引器可以用于高效索引和检索数据,从而快速搜索特定帖子或包含特定主题标签的所有帖子。
对于Web2和Web3来说,索引器具有相同的作用:使高效索引数据变得更简单。Web2领域中索引器的其中一个示例是Google,您可以搜索特定信息,Google索引整个网络为您提供搜索结果。而在Web3中,有更多的高效索引数据的解决方案,例如The Graph、SubQuery和Subsquid。
您可以使用索引器查询特定于一组智能合约的数据以及如何将数据转换到易于前端使用的实体。对于这些索引器来说,GraphQL作为查询语言,使Web2开发者更容易上手。
使用索引器时,您将发起请求从前端直接向索引器的端点查询链上数据,然后索引器将从区块链收集数据并将其返回给前端。
存储解决方案
回到上述提及的Twitter示例,您可以将视频和图片上传至Twitter。然而,将这些类型的条目存储在区块链上的费用是相当昂贵且不切实际。如此一来,在Web3开发中,需要考虑存储解决方案以实现特定格式或大量数据的存储。
在对比Web2和Web3的存储时,需要讨论主要一个方面是去中心化。在Web2中,基本的存储方式是数据库,而在某些案例中,您可以会需要用到中心化解决方案进行存储,例如Amazon Web Services (AWS)。
尽管区块链作为状态机并存储智能合约数据,但是对于存储dApp依赖的所有内容(例如前端文件、图片等)可能相对来说偏贵且低效。
为了解决此问题,很多开发者将目光转向InterPlanetary File System (IPFS)。IPFS是一个专为存储和分享内容而设计的去中心化链下协议。与区块链类似,它将数据分布式存储在多个节点中。当内容被添加到一个节点时,将立即被网络中的所有其他节点所使用。
与通过节点连接访问区块链的方式一样,当使用IPFS作为存储解决方案时,您可以通过IPFS节点访问您存储的内容。
为了让Twitter能够以可行且有效的方式存储Web2中前端所需的图像和视频,可以使用AWS来实现。然而在Web3中,您可以考虑如IPFS这类的解决方案。
将IPFS等存储方案集成至dApp时,您可以使用特定的IPFS库(例如JS-IPFS或web3.storage)与IPFS上的去中心化数据存储交互。就架构方面而言,您的前端将发送请求至其中一个库,以检索存储的数据或上传需要从IPFS节点存储的数据,然后将响应发送回前端。
通证化和Token标准
如上所述,通证化是构建在去中心化和无需信任基础设施之上应用程序的关键因素。
我们再回到Twitter示例,以真实可行的办法来定义通证化。Twitter拥有所有的基础设施,为了方面用户免费使用其产品,又创建了一个经济模型,使用户拥有他们收集的大部分数据。
在Web3版本的Twitter中,用户需要支付一笔小费用才能发送交易以发布新内容,该费用可能以区块链的原生Token支付。但是想象一下,Twitter在Moonbeam上创建一个dApp并上线自己的Token以在平台内使用。Twitter可以使用ERC-20标准创建一个同质化Token为平台提供动力,而Token可以用于支付gas费用,产生收益、激励创建者等。甚至可以为用户改善体验而免除费用。所有这些均得益于区块链原生提供的透明度、可追溯性和安全性。
ERC-20 Token是支持智能合约的同质化Token,遵循为同质化Token提供常用接口的EIP-20标准,这也是通证化最常使用的标准之一。此标准类型确保不同的ERC-20 token能够以统一的方式集成。如此一来,开发对ERC-20标准的支持意味着您的dApp可以支持任何ERC-20 Token。然而, ERC-20 Token并非是Web3领域中存在的唯一一种Token,根据不同类型的应用程序会有其他不同的Token。
如果Twitter想要为满足特定参与标准的用户分发非同质化Token,则可以转向ERC-721 Token(也称为非同质化Token,即NFT)。ERC-721 Token与ERC-20在理论上差不多相同,也是定义合约必须遵循的接口的智能合约。主要的区别在于ERC-20 Token是同质化,而ERC-721 Token是非同质化。
那么,什么是通证化?可以说是将资产、知识产权、价值、信息等的所有权转化为数字Token的过程。在区块链中,数字Token可以被轻松存储和转移,同时又继承了区块链提供的核心优势,包括透明度、可追溯性和安全性。此外,因为区块链在本质上是全局性的,通证化提供了相对简单的机制,只需简单的几个单击操作即可实现更广泛的访问。Token也将继续在新的去中心化应用和协议的开发中发挥重要作用。