欢迎光临敏速云
我们一直在努力

企业级微服务网关项目翻说黄河是畏途|Vue+Go前端后端一体化


简介是什么让Web 3.0与Web 2.0如此不同?本文以以太坊生态为例,从Web 2.0开始,一步步介绍Web 3.0的应用架构。作为一个Web 2.0应用程序,这听起来可能很简单,但仍然有许多功能构成了Medium的架构,使一切成为可能:首先,必须有一个存储重要数据的地方,比如用户信息、帖子、标签、评论、喜欢等。,这需要一个不断更新的数据库。其次,后端代码(用Node.js、Java或Python等语言编写)必须定义Medium的业务逻辑。例如,当一个新用户注册、发布一个新博客或在其他人的博客上发表评论时会发生什么。第三,前端代码(通常用JavaScript、HTML和CSS编写)必须定义Medium的UI逻辑。比如网页是什么样子,用户与页面上的每个元素交互时会发生什么。把这些串联起来。当你在Medium上写博文时,你和它的前端交互,前端和后端通信,后端和数据库打交道。所有这些代码都托管在一个中央服务器上,并通过网络浏览器发送给用户。这是对现在大多数Web 2.0应用程序如何工作的一个很好的顶层抽象总结。

但是所有这些事情都在改变。区块链技术开启了令人兴奋的Web 3.0应用新方向。在这篇文章中,我们将关注区块链以太坊给我们带来了什么。(B)是什么让Web 3.0如此不同?与Medium这样的Web 2.0应用不同,Web 3.0消除了中间人,没有集中的数据库来存储应用状态,也没有集中的Web服务器来承载后端逻辑。相反,您可以使用区块链在由互联网上的匿名节点维护的分散状态机上构建应用程序。这里的“状态机”指的是维护某个状态的机器,包括给定的程序状态和这个机器上未来允许的状态。区块链是一个状态机,由一个“创建”状态实例化,有非常严格的状态转换规则(即共识机制)。更好的是,没有一个实体可以控制这个分散的状态机,因为它是由网络中的每个人共同维护的。后端服务器呢?与Medium的后端控制不同,在Web 3.0中,您可以编写定义您的应用程序逻辑的智能契约,并将其部署在分散的状态机中。这意味着每个想要构建区块链应用程序的人都将他们的代码部署在这个共享状态机上。前端呢?几乎不变,除了我们后面会介绍的一些特殊情况。现在这个架构看起来像这样:发现现在,让我们更深入地探索是什么让这一切成为可能。(1)区块链以太坊区块链被誉为“世界计算机”。这是因为它是由对等节点网络维护的全局可访问且确定的状态机。状态机的状态变化受到网络中节点遵循的一致性规则的约束。所以,换句话说,它实际上被设计成一个状态机,世界上任何人都可以访问和写入。这使得机器不是任何单个实体所独有的,而是网络中的每个人所拥有的。我们还需要知道一件事:数据只能写入以太坊区块链-你永远不能更新现有的数据。(2)智能合约智能合约是一个运行在以太坊区块链上的程序,它定义了区块链上发生的状态变化背后的逻辑。智能合约是用高级语言编写的,比如Solidity或者Vyper。因为智能合约的代码存储在以太坊区块链上,所以每个人都可以在网络上查看所有智能合约的应用逻辑。(3)以太坊虚拟机,EVM)接下来是以太坊虚拟机,用来执行智能合约中定义的逻辑,在这个全局可访问的状态机上处理状态变化。EVM不懂用于编写智能合同的Solidity和Vyper等高级语言。相反,你必须将高级语言编译成EVM可以执行的字节码。(4)前端最后是前端。如前所述,前端定义了UI逻辑,但它也与智能合约中定义的应用程序逻辑进行通信。前端智能合约和前端智能合约之间的通信比上图所示的稍微复杂一点。让我们仔细看看这部分。与前端智能合同的通信我们希望前端可以和智能合约进行通信,这样就可以调用函数,但是请回忆一下以太坊是一个去中心化的网络。以太坊网络中的每个节点在以太坊状态机上保留所有状态的副本,包括与每个智能合约相关的代码和数据。当我们想要与区块链上的数据和代码进行交互时,我们需要与其中一个节点进行交互。这是因为任何节点都可以广播将在EVM执行的事务请求。然后,挖掘器将执行事务并将状态变化传播到网络中的其他节点。有两种方法可以广播新政:建立你自己的运行以太坊区块链软件的节点。使用第三方服务提供的节点,如Infura、Alchemy和Quicknode。

如果使用第三方服务,就不用担心自己跑完整个节点。毕竟,在自己的服务器上建立一个新的以太坊节点可能需要几天时间。(有大量数据需要同步,这甚至会占用比普通笔记本电脑正常处理更多的带宽和存储空间)此外,随着Dapp的逐步扩展,存储完整以太坊区块链的成本也将增加,您需要添加更多的节点来扩展您的基础架构。这就是为什么随着基础设施日益复杂,您需要全职开发人员来帮助您维护基础设施,以确保可靠的正常运行时间和快速的响应时间。可以说,避免这些令人头痛的问题是许多DApp选择使用Infura或Alchemy等服务来管理其节点基础设施的原因。当然这是一个取舍,因为会产生一个集中的卡点,不过这个难题暂且不讨论。;)接下来,我们来谈谈提供商。当你需要与区块链进行交互时,你所连接的节点(无论是你自己设置的还是使用第三方服务提供的现成节点)通常被称为“提供者”。每个以太坊客户端(即提供者)都实现了一个JSON-RPC规范。这确保了前端应用程序在与区块链交互时可以有一个统一的方法。如果需要介绍JSON-RPC,简单来说就是一个无状态的轻量级远程过程调用(RPC)协议,定义了一些数据结构及其处理规则。与传输协议无关,所以这个概念可以用在进程内通信、套接字通信、HTTP通信或者各种消息传输环境中。它使用JSON(RFC 4627)作为数据格式。一旦您通过提供商连接到区块链,您就可以读取存储在链上的状态。但是如果您想写状态,在将事务提交给区块链之前,您还需要做一件事——用您的私钥签署事务。例如,假设我们有一个DApp,用户可以在上面阅读博客或向区块链发布博客。前端可能有一个按钮,允许任何人查询特定用户写的博客。(回想一下,从区块链读取数据不需要用户在交易上签名。然而,当用户想在链上发布新帖子时,DApp会要求用户用他们的私钥在交易上“签名”——只有这样,Dapp才会将交易转发给区块链。否则,该节点将不接受该事务。说到签名,Metamask该大显身手了。Metamask是一个工具,它允许应用程序轻松处理密钥管理和事务签名。很简单:Metamask将用户的私钥存储在浏览器中,每当前端需要用户签名交易时,就会调出Metamask。Metamask还提供了与区块链(作为提供者)的连接,因为它已经与Infura提供的节点建立了连接(因为在签署事务时需要Infura(译者注:实际上签署操作并不依赖于Infura,但是在签署之前,meta mask可能需要从Infura读取估计气体等信息。另外,如果通过Metamask发送事务,Metamask自然需要连接到Infura提供的节点上)。这样,元掩码既是提供者又是签名者。下行集中存储当然,如果你构建一个应用,这个应用的所有智能合约和数据完全承载在以太坊区块链上,也是可行的。然而,任何在以太坊上构建应用程序的人都知道,在区块链上存储所有内容确实非常昂贵,而且(甚至)非常敏捷。请记住,使用以太坊,用户每次向区块链添加新数据时都必须付费。这是因为向分散状态机添加状态会增加维护状态机节点的成本。使用您的Dapp需要用户在每次需要向他们的交易中添加新状态时支付额外的费用,这不是最佳的用户体验。缓解这种情况的一种方法是使用分散的离线存储解决方案,如IPFS或Swarm。IPFS是一个分布式文件系统,用于存储和访问数据。因此,IPFS系统并没有将数据存储在一个集中的数据库中,而是将数据分布存储在一个点对点的网站中,方便您在需要时获取数据。IPFS还有一个名为“Filecoin”的激励层。该层鼓励世界各地的节点存储和检索这些数据。你可以使用诸如Infura(为你提供IPFS节点)或Pinata(为你提供易于使用的服务,你可以“固定(修复)”你的文件到IPFS,获得IPFS散列并存储在区块链上)这样的提供商。Swarm的相似之处在于它是一个去中心化的存储网络,但有一个显著的区别。Filecoin是一个独立的系统,而Swarm的激励系统建立在以太坊区块链中,并通过智能合约来执行,用于存储和检索数据。所以到目前为止,有了IPFS或者Swarm,我们的应用架构如下:敏锐的读者可能还会注意到下图中前端代码没有存储在区块链上。我们可以像在Web 2.0中一样在AWS上托管这些代码,但这将为您的DApp创建一个集中的卡点。AWS宕机怎么办?如果它审查你的应用程序呢?这就是为什么,如果你想构建一个真正去中心化的应用,你应该选择在一个去中心化的存储方案中托管你的前端,比如IPFS或者Swarm。所以现在应用程序架构看起来更像这样:区块链数据查询到目前为止,我们已经讨论了如何通过签署事务并将事务发送到区块链来将数据写入区块链。但你如何从区块链智能合约中读取数据呢?有两种主要方法:(1)智能合约事件您可以使用Web.js库来查询和监控智能合约事件。您可以监视特定的事件,并在每次触发事件时指定一个回调。例如,如果您有一个从A向B发送连续付款流(在每个块中)的智能合约,那么您可以在每次生成对B的新付款时发布一个事件。您的前端代码可以监控由智能合约触发的事件,并基于它执行特定的操作。(2)图表以上方法是有效的,但有一定的局限性。例如,如果在部署智能合约后,您意识到需要发布之前未包含的事件,您该怎么办?不幸的是,您必须重新部署包含事件和数据的新智能契约。此外,使用回调处理各种UI逻辑很快就会变得相当复杂。该是“图表”出现的时候了。图是链下的索引解决方案,使得以太坊区块链上的数据查询更加容易。该图允许您定义要索引的智能合约、要侦听的事件和方法调用,以及如何将传入事件转换为前端逻辑(或任何使用API的对象)可以使用的实体。它使用许多前端工程师喜欢的GraphQL作为查询语言,因为它比传统的REST APIs更具表现力。通过索引区块链数据,该图允许我们在应用程序逻辑中以低延迟查询链上的数据。现在,应用程序架构如下:我们差不多完成了,但是还有一个主要话题:扩张。DApp膨胀您可能已经听说过,以太坊是不可扩展的——至少现在还不是。以太坊的平均天然气价格平均交易费平均块大小显然,会有问题。在以太坊上建造DApp,燃气费高,街区满,导致用户体验非常糟糕。幸运的是,一些解决方案正在开发中。一种流行的扩展解决方案是Polygon,这是一种L2(第2层)扩展解决方案。Polygon不是在主链上执行事务,而是使用“侧链”来处理和执行事务。侧链是与主链相连的次级区块链。每隔一段时间,侧链向主链提交其最近的嵌段的聚集。L2解的其他例子是最优上滚和ZK上滚。这里的思路类似,在链下使用一个“rollup”智能合约,批量打包交易,然后定期将这些交易提交给主链。我们应该吸收的思想是:L2解决方案在链下执行事务(也就是较慢的部分),链中只存储事务数据。这允许我们扩展区块链,因为我们不必执行链上的每个事务。这也使得交易更快更便宜——而且交易在必要的时候仍然可以与以太坊主链进行通信。发展体系如果这一切让你感到眩晕,你并不孤单。把所有这些工具放在一起非常复杂,会带来非常痛苦的开发体验。但是请放心——我们开始看到新的开发者框架真正改善了开发者的体验。例如,Hardhat是一个开发者框架,它使以太坊开发者更容易构建、部署和测试他们的智能合约。Hardhat提供了一个“Hardhat网络”,开发人员可以通过它在本地网络上部署智能合约,而无需处理真实的网络环境。更好的是,它还提供了一个非常好的插件生态系统,让开发者更加方便。Hardhat还提供了一个类似javascript的console.log()方法用于调试。当然,这只是开始。希望以后能继续看到更好的开发者工具。标签大多数人花几个月的时间来弄清楚工具链是如何工作的,所以如果你是一个新的DApp开发人员,我希望这篇文章能为你节省一些时间。译者总结Web 3.0的核心是去中心化,这是与Web 2.0最本质的区别。去中心化要求分布式网络维护系统状态,分布式网络需要由不同利益相关者维护的节点组成。此外,一个可以执行自定义逻辑的通用虚拟机也非常重要,这使得各类应用在Web 3.0生态系统中开花结果成为可能。我们将可以在这个虚拟机上执行的代码称为智能契约。在应用层,前端需要在调用智能合约时与网络中的一个节点进行通信。最合适的去中心化方法是应用程序本身部署一个区块链节点,成为去中心化网络的一员,但这无疑增加了开发人员的工作量。另一种更轻便的方式是选择第三方供应商提供的节点,比如Infura等。但后者有集权的风险,需要根据实际情况权衡。无论哪种情况,连接的节点都被称为提供者,每个提供者都需要实现一组标准接口(以太坊JSON-RPC规范)来读写区块链数据。对于应用程序用户管理,它与Web 2.0集中存储用户信息和密钥略有不同。区块链中的每个用户使用一个地址来唯一地标记它,并且每个地址对应一个私钥。当您想要使用某个地址作为事务的发送方时,您需要用相应的私钥对其进行签名。因此,只要您有一个地址的私钥,您就可以使用该地址在不同的应用程序中发送事务。但是如果我们有10个应用程序,那么在使用每个应用程序时,我们需要输入我们的私钥吗?不考虑安全性,用户的便利性也成了问题。毕竟每个应用都可能使用同一个私钥,重复输入只会消耗用户的耐心。有没有统一的方式来管理私钥?像Metamask这样的钱包就是这么做的。用户只需要在钱包中输入一次私钥(实际操作可能是导入助记符),每个应用在需要用私钥签名的时候都会调出钱包。另外,钱包本身也有一些简单的功能,比如显示用户余额,转账等。在数据存储方面,由于存储在区块链上的数据需要全网维护,非常昂贵,可以选择将部分数据存储在IPFS/SWARM等集中存储中,利用激励机制保证数据的安全性。在数据查询方面,可以直接调用提供者的读取接口直接读取区块、交易、合约数据、事件等。但是与传统的集中式数据库相比,它有一个非常大的缺点,就是缺少索引,不能快速读取想要的数据。因此,Graph等离线索引服务应运而生,应用程序可以使用它更方便快捷地索引所需数据。区块链经常因其性能问题而受到批评。一些第二层方案相继提出,其中一些已经付诸实施。通过在二级链中执行交易,主链只记录压缩后的交易数据,在享受主链带来的安全保障的同时,可以避免主链昂贵的手续费和较大的延迟。此外,以太坊计划在2022年将共识算法从POW升级到POS,这也将是性能优化的一个非常重要的里程碑。最后,对于开发者来说,可以使用Hardhat、Truffle和Remix等工具来提高DApp应用开发的效率。如有疑问或发现文中有错误,欢迎评论交流!在原文中记录几个有趣的短语:兔子洞:用于表示一种通常难以摆脱的怪异、混乱或荒谬的情况或环境。带回家:拿走某物。home可以指在会上吸收/记住想法、意见或概念。本文中用“-”连接两个词使之成为形容词,可以理解为“值得吸收”。
小编推荐电脑版2019年4月服务器名称清理公告|梦幻西游


版权声明:本站大部分内容来自互联网,不拥有所有权,不承担相关法律责任。如发现有违法违规的内容或本文侵犯了你的权益, 请联系管理员,一经查实,本站将立刻删除。未经允许不得转载 » 企业级微服务网关项目翻说黄河是畏途|Vue+Go前端后端一体化