Web3.js和ethers.js都是JavaScript库,其作用是使开发者可以与以太坊区块链交互。这两个库都很实用,都能满足大多数以太坊开发者的需求。本文将重点围绕web3.js和ethers.js的相同点和不同点来对它们进行比较,以便你能更好地理解它们的细微区别。本文的目的是帮助开发者理解两个库的优缺点,以便能够决定哪个库适合其具体用例。本文中提供了一些资源,可能对刚接触区块链开发的用户有用。
一言以蔽之:两个库都有用,针对你的使用场景不同,总有一个库更加适合你(编者注:登链社区对2个文案均有翻译,web3.js中文文档地址:https://learnblockchain.cn/docs/web3.js/),ethers.js中文文档地址:https://learnblockchain.cn/docs/ethers.js/。
Web3.js拥有一个与以太坊基金会相关的用户和维护者社区。它提供实用的API参考。从大约2015年开始,它在许多项目中被广泛使用。因此,该库已经成为许多“构建去中心化应用新手入门”教程的“必备资源”。
Ethers.js的优势之处在于紧凑小巧,同时又包含大量测试案例。它提供实用的“新手入门”文档,因此新用户也可使用。许多开发者评价ethers.js使用起来“简单”、“直观”,并且该库在近两年越来越受欢迎,下载量和在项目中的使用量也不断增加。
什么是web3.js?
web3.js库是由以太坊基金会构建的开源JavaScript库,包括通过JavaScript对象表示法-RemoteProcedureCall(JSON-RPC)协议与以太坊节点进行通信的函数。也就是说,它是一个支持开发者与以太坊区块链进行交互的JavaScript库。Web3.js最新版本为1.2.9,在本文中将引用该版本。Web3.js由四个模块组成。
什么是模块?
在JavaScript中,模块是在更大的程序中具有特定功能的代码。模块应该具有独立性,即如果将某个模块从库、程序或应用中移除,整个库、程序或应用应该不会停止运行。熟悉python或java的用户可能也熟悉“类”,它与模块类似。FreeCodeCamp对JavaScript模块进行了详细解释,应该对于刚接触JavaScript的用户有用。
web3.js由哪些模块组成?
Web3.js有一个主类,称为web3。在该类中可以找到该库的大多数功能。组成web3js的另外5个模块分别是:
web3-eth
web3-shh
web3-bzz
web3-net
以太坊网络未受亚马逊AWS宕机影响,但对Lido的依赖可能会在未来引发问题:金色财经报道,以太坊新闻周刊创始人Evan Van Ness观察到,今日凌晨亚马逊AWS服务中断事件并未对以太坊网络产生影响。尽管64.5%的以太坊网络依赖于亚马逊托管服务提供商据悉,此次受影响的主要是美国部分地区。但Van Ness补充说,由于在Lido上质押的以太坊数量目前约为710万(或总数的35%),因此如果中断发生在欧洲,影响可能会更大,因为Lido严重依赖AWS提供的云托管服务。[2023/6/14 21:36:37]
web3-utils
web3-eth有什么作用?
web3-eth模块中包含函数,其作用是使web3.js的用户可以与以太坊区块链进行交互。具体来说,这些函数能够与智能合约、归外部所有的账户、节点、挖出的区块以及交易进行交互。下面是三个说明示例:
_web3.eth.getBalance_的作用是获得指定区块的某个地址的以太坊余额
_web3.eth.signTransaction_的作用是对交易签名
_web3.eth.sendSignedTransaction_的作用是将签名的交易发送到以太坊区块链。
web3-shh有什么作用?
web3-shh模块的作用是使你可以与Whisper协议进行交互。Whisper是一个消息传输协议,其目的是轻松广播消息以及进行低层异步通信。下面显示了两个说明性示例:
_web3.shh.post_将whisper消息发布到网络
_web3.shh.subscribe_创建传入的whisper消息订阅
web3-bzz有什么作用?
web3-bzz模块的作用是使你可以与Swarm交互。Swarm是一个去中心化存储平台和内容分发服务,它可以用来为去中心化应用存储图片或视频等文件。下面显示了两个说明性示例:
_web3.bzz.upload_的作用是使你可以将文件和文件夹上传到Swarm
_Web3.bzz.download_的作用是使你可以从Swarm下载文件和文件夹
web3-net有什么作用?
web3-net模块的作用是使你可以与以太坊节点的网络属性进行交互。通过web3-net,你可以采用你需要获得的信息所关联的协议后加.net来查找该节点的相关信息。下面显示了两个说明性示例:
web3.*.net.getID返回网络ID
web3.*.net.getPeerCount返回连接到节点的对等点数
Coin Bureau创始人透漏自己的加密货币投资组合,以太坊占30%:加密货币信息中心Coin Bureau创始人透露,自己的加密货币投资组合主要由市值排名前20位的加密货币组成。其中以太坊占30%,比特币占27%,DOT占9.34%,ADA占8%,LINK占4%。[2021/4/16 20:28:52]
web3-utils有什么作用?
web3-utils模块为你提供实用程序函数,这些函数可在以太坊去中心化应用以及其他web3.js模块中使用。实用程序函数可以重复使用,使代码编写更轻松,在JavaScript和其他编程语言中很常见。Web3-utils包含实用程序函数,这些函数用于转换数字、验证值是否满足特定条件以及搜索数据集。下面显示了三个说明性示例:
_web3.utils.toWei_将以太转换为Wei
_web3.utils.hexToNumberString_将十六进制值转换为字符串
web3.utils.isAddress,校验特定字符串是否为有效的以太坊地址。
什么是ethers.js?
Ethers.js是一个JavaScript库,其作用是使开发者可以与以太坊区块链进行交互。该库包含JavaScript和TypeScript中的实用程序函数,以及以太坊钱包的所有功能。Ethers.js的最新版本为5.0.3。Ethers.js是通过Ethers创建的,是采用MIT许可证的开放源。
与web3.js相似,ethers.js有四个模块,构成应用程序编程界面(API)。
Ethers.provider
Ethers.contract
Ethers.utils
Ethers.wallets
ethers.provider有什么作用?
Ethers.provider的作用是封装与以太坊区块链的连接。它可以用于签发查询和发送已签名的交易,这将改变区块链的状态。下面显示了三个说明性示例:
_ethers.providers.InfuraProvider_的作用是使你可以与Infura托管的以太坊节点网络建立连接
_ethers.provider.getBalance_将为你获取区块链中某个地址或区块的以太坊余额
_ethers.provider.resolve_将解析传递到以太坊地址的以太坊名称服务(ENS)名称。
注:_web3.js_也有服务于此目的的提供商,位于_web3_基础模块中。_Ethers.js_和_web3.js_的组织方式截然不同,因此尽管两个库的功能非常相似,但模块间并非总是能清晰对应。
鱼池已生产超过160万个以太坊区块:官方消息,鱼池从自2016年以来已确保以太坊网络的安全,生产了超过160万个区块。[2021/2/6 19:03:52]
ethers.contract有什么作用?
Ethers.contract的作用是部署智能合约并与它交互。具体来说,该模块中的函数用于侦听从智能合约发射的事件、调用智能合约提供的函数、获取有关智能合约的信息,以及部署智能合约。下面显示了两个说明性示例:
_ethers.ContractFactory.fromSolidity_从Solidity编译器的编译器输出或从Truffle生成的JSON文件创建一个用于部署智能合约的“工厂”。_ethers.Contract_使你可以与已部署的智能合约进行交互。ethers.utils有什么作用?
Ethers.utils提供用于格式化数据和处理用户输入的实用程序函数。Ethers.utils的作用方式与web3-utils相似,能够简化去中心化应用的构建流程。下面提供了三个示例:
_ethers.utils.getContractAddress_从用于部署智能合约的交易中提取智能合约地址
_ethers.utils.computeAddress_通过传递与地址相关的公钥或私钥的函数来计算地址_ethers.utils.formatEther_将所传递的Wei金额转换为Ether十进制字符串格式
ethers.wallet有什么作用?
Ethers.wallet提供的功能与我们目前讨论过的其他模块截然不同。Ethers.wallet的作用是使你可以与现有钱包建立连接、创建新钱包以及对交易签名。下面提供了三个示例:
_ethers.wallet.createRandom_将创建随机新账户。
_ethers.wallet.sign_将对交易签名并将已签名的交易返回为十六进制字符串的形式。
_ethers.wallet.getBalance_将为我们提供钱包地址的以太坊余额。
Web3.js在web3.eth模块中有一个类似的包,称为web3.eth.accounts。但是,在该包的文档中有如下说明:“该包未经审核,可能不安全。在用于生产环境之前,请注意妥善清除内存,安全存储私钥,并适当测试交易接收和发送功能!”
web3.js还是ethers.js?
我如何确定在去中心化应用中到底应该使用web3.js还是ethers.js呢?两者有何区别?
首先,如果你要基于样板应用或教程开发,则使用该样板或教程建议你使用的库,不管是web3.js还是ethers.js。这将为你省去不少麻烦,让你可以更好地跟着教程操作。请务必使用教程指定的web3.js或ethers.js版本。有许多教程没有更新,不要想当然地认为你可以使用最新版本的库,除非教程中具体说明。
动态 | 以太坊总量已达1.01亿 通胀程度恶化:据Coinmarketcap数据显示,以太坊总量已经超过了1.01亿,以太坊浏览器数据显示,以太坊的区块高度达到620万。此前V神提议给以太坊设置上限至1.2亿左右,以太坊通胀程度恶化。[2018/8/24]
如果你要从零开始构建应用并确定需要使用的库,我们有一个使用评估流程,下面列出了9个问题。在确定哪个库适合你时应该思考这些问题。此外还提供了一些上下文和信息以帮助你回答这些问题。
库的受欢迎程度有多重要?“在Github上受欢迎的项目正如你所料。也就是说,有许多人提问、参与和支持。这些活动能让软件更加可靠。通过查看任何一个项目的加星数、已发布的问题数量、处理中的拉取请求以及项目的参与者数量,可以确定它的受欢迎程度。”
截止到撰写本博客时,Web3.js获得了近8,800颗星,而ethers.js获得了近1,500颗星。在GitHub上使用web3.js的资源库有51,300个,而使用ethers.js的有18,500个。Web3.js存在的时间更长,这也是web3.js更受欢迎的原因之一。
库的维护有多重要?我们希望自己使用的库能够频繁更新,以修复错误和添加新功能。尽管不完美,但通过查看一两个月期间的提交数、已解决的问题数、正在处理的问题数以及维护者数,可了解开源项目的优势和弱点。用户从中也能看到库的维护模式,了解库一般有哪些更新并修复了哪些错误,并以此作为判断库维护情况的代理指标。我们来查看两个库在GitHub上的每月动态,以了解它们的统计数据。
ethers.js的维护者只有一人—RichardMoore,他完成的提交数和已解决的问题数相当惊人,值得称赞。Web3.js有12位维护者,绝大多数提交数都是由其中三人完成的。在这方面没有明显的胜负差异,但在选择库时应注意,这些统计数据可以帮助你确定,在维护性方面你最看重哪些,并根据你的需求确定库的优先性。
库的开发负责人是谁?使用库的项目有多少个?Web3.js是以太坊基金会的一个项目。以太坊基金会是一个非营利性组织,致力于协议层开发的研究和组织。Ethers.js的目的是建立“一个完整、简单、小巧的库,取代web3和ethereum.js”。Ethers.js的开发者是RichardMoore,并由他来创建和维护库。
有些项目公开声明了他们使用的是哪个库,我们认为从这些数据中可以看出两个库受欢迎的程度都很高。查看web3.js和ethers.js依赖图,以了解你信任的项目使用的是哪个库,或者他们是否同时使用/支持两个库。
库具有测试有多重要?如果预编写的测试对你的项目来说很重要,那么从历史数据来看,ethers.js胜。截至撰写本文时止,Ethers.js已经在Github上发布了3.0发行版的清晰测试文档,但还没有为5.0发行版更新该文档。Web3.js在测试文档方面稍逊一筹。如果ethers.js在接下来几周更新测试文档,那么在测试和测试文档方面将继续保持优胜地位。到目前为止尚无定论,因为ethers.js它测试套件至今似乎还未更新。
动态 | 谷歌联合创始人Sergey Brin自称是以太坊矿工:谷歌联合创始人Sergey Brin称,他正在和他10岁的儿子一起开采以太坊。Sergey Brin还表示,零知识证明的概念“真的令人难以置信”。他认为以太坊挖矿业在最近的“计算机热潮”中发挥了核心作用,这助于他在5月份给投资者的信中推动“技术复兴”。[2018/7/10]
库的下载量有多重要?由于web3.js存在的时间更长,因此它的下载量超过了ethers.js的下载量,但是如果查看周下载量,ethers.js超过了web3.js,因此目前的下载次数更加频繁。Ethers.js的近期下载量更高,而web3.js的总下载量更高。
Web性能有多重要?如果web性能对你来说非常重要,则我们认为ethers.js库的性能更加优越。ethers.js库声称未压缩大小为284kb,而在NPM上列出的解压缩大小为3.5MB。Web3.js至少大一个数量级,解压缩大小为10.6MB。考虑到ethers.js比web3.js更加小巧,因此推测使用ethers.js的应用程序比使用web3.js的相同应用程序加载速度更快。这是因为不管使用什么库,它都会和构成web应用程序的其他资源一起加载。我们没有使用web3.js和ethers.js分别对完全相同的应用程序测试加载速度,因此在这一点上应该持保留态度。如果数据量大小对应用程序会有影响,则数据量较小的ethers.js库会有优势。
文档质量有多重要?文档质量是一个主观性指标,但评估文档质量的其中一种方式是阅读文档,看它的阅读难易程度如何。最理想的情况是,编写的文档能够让新用户理解如何使用库。文档在结构安排上也应该能够让资深用户快速找到他们需要查找的内容。
Web3.js具有广泛而相当实用的API参考。这是文档最重要的部分。“新手入门”材料较为简单,这可能会深受资深用户的欢迎,但适合web3.js新用户使用的材料很少。
Ethers.js包括“新手入门”部分以及拓展性API参考。这些材料非常实用,使得ethers.js相对于web3.js具有优势,尤其是对以太坊生态系统中的入门级开发者而言。针对ethers.js的文档中有一些不完整的部分,这对用户来说很不方便。Ethers.js还清晰地介绍了使用ethers.js的优势。
两个库的文档都存在不足之处,因此如果文档对你来说很重要,请花一些时间来了解并确定哪个库提供了充分的信息来帮助你实现你需要构建的特性。
库的总使用量有多重要?由于web3.js存在的时间更长,因此具有更高的下载量和GitHub加星数,而ethers.js在受欢迎程度上有所上升。最终应该由你自己来决定库的哪些方面对你的用例最重要。
许可证有多重要?根据你的具体用例,开源软件许可证对你来说可能很重要。Web3.js有LGPLv3许可证,ethers.js有MIT许可证。联系关于该主题的法律专家可以获取有关许可证的更多详细信息。但是,SlavaTodavchich在文章“了解开源和免费软件许可”中针对该主题进行了生动有趣的阐述。
结论
正如我们开篇就已指出,两个库都能够完成任务。Ethers.js在近两年来越来越受欢迎,下载量和项目使用量都不断增加。Web3.js一直以来都作为标杆存在,并且仍然拥有许多开发者共享资源。
请关注第二部分。我们将发布一份跟进教程,介绍如何连接到_InfuraAPI_并使用_web3.js_和_ethers.js_发送交易。
参考资料
web3.js中文文档:https://learnblockchain.cn/docs/web3.js/
ethers.js中文文档:https://learnblockchain.cn/docs/ethers.js/
对JavaScript模块进行了详细解释:https://www.freecodecamp.org/news/javascript-modules-a-beginner-s-guide-783f7d7a5fcc/
Whisper:https://geth.ethereum.org/docs/whisper/whisper-overview
Swarm:https://ethersphere.github.io/swarm-home/
Ethers:https://ethers.io/
承诺:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
承诺:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
web3.js:https://github.com/ethereum/web3.js/pulse/monthly
ethers.js:https://github.com/ethers-io/ethers.js/pulse/monthly
以太坊基金会:https://ethereum.org/en/
“一个完整、简单、小巧的库,取代web3和ethereum.js”:https://www.youtube.com/watch?v=P-UzQTDfdXY
web3.js:https://github.com/ethereum/web3.js/network/dependents
ethers.js:https://github.com/ethers-io/ethers.js/network/dependents?package_id=UGFja2FnZS0xNjEzMjI4Ng==
在Github上发布了3.0发行版的清晰测试文档:https://github.com/ethers-io/ethers.js/tree/master/docs
截至5月20日止为14,703,432次:https://npm-stat.com/charts.html?package=web3&from;=2015-01-01&to;=2020-05-20
截至5月20日止为8,500,336次:https://npm-stat.com/charts.html?package=ethers&from;=2015-01-01&to;=2020-05-20
184,798:https://www.npmjs.com/package/ethers
175,661:https://www.npmjs.com/package/web3
ethers.js库声称未压缩大小为284kb:https://docs.ethers.io/v5/
解压缩大小为3.5MB:https://www.npmjs.com/package/ethers
解压缩大小为10.6MB:https://www.npmjs.com/package/web3
API参考:https://web3js.readthedocs.io/en/v1.2.9/web3.html
“以太坊基本介绍”部分:https://docs.ethers.io/v5/concepts/events/
NPM:https://www.npmjs.com/package/web3
了解开源和免费软件许可:https://medium.com/@moqod_development/understanding-open-source-and-free-software-licensing-c0fa600106c9
InfuraAPI:https://infura.io/dashboard
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/9558543.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
币安为何推出第三条链?这对BNB意味着什么?
标签:HERETHERETHEBTCtether币怎么买Ethereum Stake FinanceTetherBlackIBTCV价格
12月20日,2020网易未来大会·区块链与人工智能专场论坛于杭州盛大举行。大会上,中国万向控股副董事长兼执行董事、万向区块链董事长兼CEO肖风在《互联网与区块链——商业的视角》主题演讲时表示,
从BTC的7个相关指标来具体分析其基本面,夏普比率、S2F等都显示看涨预期。原文标题:《No.92|跨越2020:BTC基本面分析》撰文:HowardYuan,区块链投资机构Fundamenta.
首先我们打开飞狐区块链浏览器,通过这上面的数据,我们要弄明白一个核心的问题,每天全网平均有效算力增速是多少?Filecoin矿机咨询微.信通过区块链浏览器实时数据我们可以看出,今天12.15号.
本文的整理自去中心化信息网络投资公司PlaceHolderVC的合伙人ChrisBurniske的推特发言.
新加坡星展银行提供加密货币交易、托管以及证券型通证全生命周期服务,这表明银行与证券业务开始融合.
以太坊2.0的分片与过渡会分阶段进行,期间以太坊1.0的PoW挖矿产业还会继续。原文标题:《一文读懂ETH与ETH2.0基础与挖矿特点》撰文:Future小哥哥ETH是Ethereum网络的原生.