每个可编程区块链都有一组SDK或库,可帮助与特定区块链连接和通信。今天的大多数区块链都依赖于以太坊网络,使其与EVM兼容。如果创建了一个ETH库,就可以在任何EVM兼容的区块链上使用它。但是,可以使用JSON-RPC协议进行通信。在这篇文章中,我们将比较两个流行的ETH库。您可以了解它们之间的区别、优点和缺点。本文还可以帮助您决定在未来的项目中使用哪个库。用于区块链的JavaScript自1995年由BrendanEich发明以来,JavaScript已经发展成为互联网上最常用的编程语言,用于构建当今使用的许多工具。根据Statista[1],软件开发人员中最常用的语言是JavaScript。想象一下你需要解决一个特定的问题;你知道的唯一语言是JavaScript。应该可以用JavaScript来解决这个问题,而不是学习一门新的高级语言来解决问题。许多开发人员都面临着这个障碍,并找到了一种使用JavaScript构建dApp的方法,方法是构建一个可以通过节点提供商连接到区块链的SDK/库。但是,此解决方法降低了在区块链空间中构建的入门级别。您无需学习Rust和Solidity等高级语言即可为Solana[2]或以太坊链构建dApps[3]。此外,降低区块链开发的入门级别是JavaScript的众多好处之一。什么是图书馆?在编写dApp时,您可能会发现需要为区块链上的特定交易重复特定代码。此代码/程序可能很长,您将不得不为新项目继续编写此代码。您可以使用代码片段来自动执行该过程,而不是重复此过程。您可以在需要时将此库插入到您的项目中。这种方法加快了开发速度并消除了重复。JavaScript模块Javascript模块是包含JavaScript函数或代码簇的典型文件。您可以将它们提取到不同的文件中,而不是让函数遍及您的代码。创建模块使更改变得非常容易,因为您不必开始查看大型代码库来查找特定函数来更新变量或模式。由于Javascript本身不支持类,因此JavaScript模块模仿类。类帮助开发人员在单个对象中将方法和字段设为公共和私有。通过这种模式,我们可以使用export和import关键字在我们的JavaScript项目中创建和使用函数。参见下面的例子:exportfunctionmyFunction(value1,value2){returnvalue1*value2;}从上面的代码中,我们已经公开了这个函数。为了使用这个函数,我们可以使用import关键字,如下所示:importmyFunctionfrom"./value.js"现在我们了解了JavaScript模块。让我们在下一节中讨论ethers.js库。Ethers.js自Ethers.js诞生以来,它经历了稳定的增长,甚至成为以太坊开发者中使用最多的基于JavaScript的web3库之一。该工具可帮助Javascript开发人员与以太坊链和任何以太坊虚拟机(EVM)兼容的区块链进行交互。一位名叫RichardMoore的加拿大软件工程师在2015年创建了ethers.js作为web3.js的替代品。Ethers.js以轻量级着称。它的不同之处在于它管理密钥和与区块链交互的方式。在ethers.js中,有两个实体处理上述问题:1.使用私钥签署交易的钱包。2.使用JSON-RPCURL连接到区块链的提供商。Ethers.js检查状态并发送交易。Ethers.js库大小的优势-Ethers.js压缩后为88KB,未压缩时为284KB。ENS-ENS就像区块链中的DNS。无论你在哪里使用以太坊地址,你也可以在那里使用.eth地址。您无需样板代码即可轻松设置域名。测试-ethers.js经过广泛测试。其中许多测试用例都是理查德摩尔自己编写的。有超过10,000个测试用例。许可-由于ethers.js是在MIT许可下发布的,因此任何人都可以免费使用和修改。尽管如此,只要修改后的源代码在LGPL-3.0许可下可用,就可以更改库。***性能**-考虑到体积小,在前端使用它是个好主意,因为它会大大提高性能。##Ether.js的缺点*Ethers.js相对较新。代码中存在错误是不可避免的,因此在StackOverflow等地方找到答案可能还不够。*许多基础公司积极将web3.js用于其核心项目,如果你需要为这些公司工作,你可能需要花一些钱更多时间学习web3.js.Ethers.js模块在最近一期中,我们在讨论Ethers.js之前查看了JavaScript模块,ethers.js有四(4)个模块,它们是ethers.jsAPI的核心。Ethers.Provider要了解Ethers.Provider模块的作用,您必须了解什么是节点。要访问区块链网络,您需要在您的机器上运行一个节点来访问它。该节点连接到其他节点以检查人与人之间的交易是否有效,同时它存储有关区块链状态的信息。区块链完全由节点构建或组成。这些节点由世界各地的个人运行。这意味着没有中央服务器或单一的事实来源。这就是为什么它是去中心化的。将节点想象成汽车的汽油,如果它是空的,它就不会启动。节点设置可能是一个痛苦的过程,可能需要一周或更长时间。幸运的是,存在Alchemy、infura和Quicknode等提供商。他们为您设置了Node。他们所需要的只是让您连接并且您可以访问区块链。Ethers.Contract该模块用于部署智能合约并与之交互。它提供了监听智能合约事件(封装函数)的能力。但是,您可以使用该模块调用智能合约的相关信息以及智能合约提供的功能。Ethers.utils此模块可帮助您格式化钱包余额等数据并处理其他用户输入。constaccountChangedHandler=async(newAccount)=>{constaddress=awaitnewAccount.getAddress();setDefaultAccount(地址);constbalance=awaitnewAccount.getBalance()setUserBalance(ethers.utils.formatEther(balance));awaitgetuserBalance(address)}从上面的代码来看,我们从钱包中获取到地址后,获取钱包的余额,但是由于返回值是Wei格式的输出,所以我们使用.formatEther方便阅读。Ethers.Wallet该模块允许您连接到现有地址。但是,您可以无缝注册和创建新钱包。Web3.jsWeb3.js也是一个流行的基于JavaScript的库,用于将客户端连接到区块链。该库使用HTTP、IPC或Websockets运行并与本地或远程以太坊节点交互。Web3.js于2015年发布,是一个由以太坊基金会自行创建的开源库。这意味着web3.js拥有最大的社区,这与一年后发布的Ethers.js不同。web3.js库是比任何其他库都多的项目和包的一部分。但是,Web3.js不像Ethers.js那样管理密钥。钱包和供应商没有分开,而是假设本地节点连接到处理密钥存储、交易签名和检查区块链状态的应用程序。web3.js的优势支持以太坊基金会Web3.js是由以太坊基金会开发的。这意味着它有很多开发人员为它做出贡献,当出现问题时,你肯定会比它的对应物更快地找到解决方案Ethers.js是理想的流行度可以通过GitHub星数来衡量它在区块链开发人员中的流行度。根据Github,web3.js拥有超过一万七千(17,000)颗星,而ethers.js拥有七千(7000)颗星。它的流行很大程度上是由于先驱者的影响,这给了它一个更大的社区。Web3.js的缺点大小Web3.js比Ethers.js相对更大,这使得在前端使用它是不可取的,因为它会降低dApp的性能。灵活性由于ethers.js通过关注点分离处理密钥的方式,允许开发人员以不同方式处理密钥存储和管理,web3.js在这方面存在不足。许可证Web3.js在更严格的许可证下工作,不允许在未公开发布的情况下进行修改。Web3.js模块Web3.eth:-该模块用于连接以太坊区块链和智能合约。它还允许您订阅区块链上的事件。Web3.net:-此模块允许您与网络节点属性进行交互。Web3.shh:-该模块允许与Whisper(dApps用来相互通信的一种通信技术)协议进行通信。Web3.utils:-该模块为以太坊dApp和其他web3包提供实用功能。Web3.bzz:-此模块允许您与Swarm网络进行交互[4]Web3.js和Ethers.js的比较在本次会议中,我们将使用以下标准比较这两个库:开发人员体验受欢迎程度文档易用性性能维护开发者体验这两个库都可以用几行代码创建真正强大的区块链应用程序,但ethers.js被认为更干净,因为提供者和钱包之间的关注点分离。然而,许多Foundation项目使用web3.js。这种情况导致大多数可用的教程都是用web3.js编写的,这为新开发人员提供了一个非常简单的学习曲线。比Ethers.js有更多的资源和各种问题的解决方案。流行的GitHubGitHub上流行的项目,你可能想象的是真实的。Web3.js作为最受欢迎的以太坊JavaScript库位居榜首,在GitHub上有超过16,000家初创公司,但在我看来,GitHubstars只是证明了先发优势。另一方面,ethers.js在GitHub上有超过6k星。NPM下载NPM下载显示开发人员每周为其项目下载库的次数。Web3.js的每周下载量超过265,000次,而ethers.js的每周下载量超过610次。此下载显示了从web3.js到ethers.js的更改或过渡。文档这两个库都有相当详尽的文档。无论哪种方式,ethers.js都优于web3.js,这要归功于它的入门和游戏区域。易用性Web3将钱包和提供商处理变成一个单一的对象,但它的以太坊使读取区块链、修改其状态和管理密钥成为所有单独的操作。性能在性能方面,Ethers.js是一个更好的库。由于其紧凑的尺寸,它适用于前端应用程序。以太是248kB未压缩和77kB压缩。维护Web3.js由以太坊基金会维护,但在2020年秋季[5]获得了ChainSafe的资助,使用现代Typescript重写web3.js。随着这一发展,Chainsafe致力于带来改变,以减轻使用Web3.js的痛点。根据Chainsafe的说法,他们计划修复的一个领域是:高效地过渡到Typescript。完全拥有Typescript中的整个库。创建灵活统一的库版本。支持eth2的各种功能。总而言之,Chainsafe似乎致力于做好维护web3.js的工作。然而,ethers.js由加拿大软件工程师RichardMoore维护。在GitHub上,只列出了15名贡献者。下一步做什么使用这些库时,您可以自行判断哪一个最适合您的要求。互联网上有很多教程可以帮助您尽快入门。结论Web3.js和Ethers.js都有强大的生态系统,可用于创建极快的dApp。令人惊奇的是,在我为这篇文章所做的研究过程中,这些库已经扩展了很多,并且仍在使用。我希望这能给您一些见解,让您更清楚地选择适合工作的工具。资源ethers.js[6]Web3.js[7]原文:[GodwinAlexanderEkainu]https://flutterpage.hashnode.dev/comparison-of-libraries-web3js-vs-ethersjs
