宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > 酷币 > 正文

以太坊 JavaScript 库:web3.js 与 ethers.js 比较(第一部分)

作者:

时间:1900/1/1 0:00:00

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

以太坊主流客户端均已推出主网合并预备版本:8月23日消息,包括Lighthouse、Geth在内的以太坊所有主流客户端均已推出合并准备阶段(Merge Ready)客户端,用于将以太坊主网升级至PoS,节点运营商须在两周内(而不是在9月15日之前)更新至最新版本客户端,以防止9月6日因Bellatrix分叉导致节点脱离网络。(Trustnodes)[2022/8/23 12:43:25]

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返回连接到节点的对等点数

web3-utils有什么作用?

web3-utils模块为你提供实用程序函数,这些函数可在以太坊去中心化应用以及其他web3.js模块中使用。实用程序函数可以重复使用,使代码编写更轻松,在JavaScript和其他编程语言中很常见。Web3-utils包含实用程序函数,这些函数用于转换数字、验证值是否满足特定条件以及搜索数据集。下面显示了三个说明性示例:

闪电贷平台Equalizer Finance计划8月初上线以太坊主网:据官方消息,闪电贷平台Equalizer Finance宣布,经过16周的开发之后,Equalizer平台即将发布,同时符合最质量标准和高安全要求。发布计划如下:

- 开发已完成,审计也接近完成,测试也即将进入最后阶段。

- 8月2日至7日:将在以太坊主网部署智能合约和平台。

- 8月2日至7日(同期):将上线Rinkeby测试网并开放访问,并邀请社区和开发人员对平台进行测试并报告漏洞(漏洞赏金活动也将启动)。

- 8月7日至14日,修复所有报告的漏洞,运行漏洞扫描,完成最终的安全评估,并在Rinkeby测试网和以太坊主网中应用所有优化。

- 8月14日至17日,开放主网上对平台的访问,并启动用户获取计划。[2021/8/1 1:27:09]

_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_的组织方式截然不同,因此尽管两个库的功能非常相似,但模块间并非总是能清晰对应。

USDC Treasury在以太坊上增发超560万枚USDC:据Whale Alert数据显示,北京时间7月10日14:56,USDC Treasury在以太坊上增发5,601,779枚USDC,增发哈希为:0xe56cf0abe85530facc157d06c2619ca6009e3a67a588103f8a0eb4e397ef19fb。[2021/7/10 0:42:02]

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。但是,在该包的文档中有如下说明:“该包未经审核,可能不安全。在用于生产环境之前,请注意妥善清除内存,安全存储私钥,并适当测试交易接收和发送功能!”

3.4万ETH参与以太坊2.0存款合约质押,距主网启动还需49万枚:11月6日,数据显示,34213枚ETH参与以太坊2.0存款合约质押。以太坊2.0主网启动需满足524288枚ETH参与质押,并且验证者达到16384个。目前质押率已达到6.52%,距离主网启动还需至少490075枚ETH。

据悉,当满足最低质押要求(5244288枚ETH)时,质押奖励年化可达21.6%。当质押ETH达1千万枚时,质押奖励年化为4.9%。[2020/11/6 11:51:50]

web3.js还是ethers.js?

我如何确定在去中心化应用中到底应该使用web3.js还是ethers.js呢?两者有何区别?

首先,如果你要基于样板应用或教程开发,则使用该样板或教程建议你使用的库,不管是web3.js还是ethers.js。这将为你省去不少麻烦,让你可以更好地跟着教程操作。请务必使用教程指定的web3.js或ethers.js版本。有许多教程没有更新,不要想当然地认为你可以使用最新版本的库,除非教程中具体说明。

如果你要从零开始构建应用并确定需要使用的库,我们有一个使用评估流程,下面列出了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位维护者,绝大多数提交数都是由其中三人完成的。在这方面没有明显的胜负差异,但在选择库时应注意,这些统计数据可以帮助你确定,在维护性方面你最看重哪些,并根据你的需求确定库的优先性。

动态 | LevelTradingField将推出基于以太坊区块链的加密货币衍生品交易所:据coindesk报道,交互式金融市场技术平台LevelTradingField正在使用以太坊区块链启动加密货币衍生品交易。被称为CADE的交易所将于今年9月上线。根据周五发布的新闻稿,该平台将列出跟踪比特币,以太币,莱特币,比特币现金,瑞波币和门罗币的ERC-20代币,该平台仍在考虑其他币种。[2018/8/7]

库的开发负责人是谁?使用库的项目有多少个?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它测试套件至今似乎还未更新。

库的下载量有多重要?由于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意味着什么?

标签:ETHHERTHEETHEeth大学官网PoolTogetherThe Kingdom CoinEthereum2.0

酷币热门资讯
HashKey:读懂 PoW 挖矿产业结构与矿池衍生品

长久以来,矿工需承担货币错配、硬件设备迭代、币价因素及电力成本等多重风险,金融衍生品能为矿工提供有效的避险选择.

1900/1/1 0:00:00
玩币队长:12.21比特币以太坊比特现金行情上下扫盘后多头能否延续

大家早上好,我是玩币队长。贪婪、恐惧、犹豫、侥幸心理、过于自信等是投资者较为普遍的人性弱点,投资者对自己的弱点绝不能低估,对自己的能力绝不能高估,每一次失误几乎都是因为自己的弱点造成的。从某种意义上说,人性弱点的多少决定了盈亏的多少.

1900/1/1 0:00:00
Solidity 技巧:如何减少字节码大小及节省 gas

译文出自:登链翻译计划 译者:翻译小组 校对:Tiny熊 Solidity是一种特殊的语言,有许多的奇怪巧。由于Solidity被创建为可在EVM上使用其有限的函数集,因此许多函数在Solidity中的行为与大多数其他语言不同.

1900/1/1 0:00:00
从 Web 3.0 的定义谈起,描绘其经济逻辑及区块链技术架构发展方向

从比特币的白皮书诞生开始,密码朋克们就给我们描绘了另一种世界可能性的世界可能性场景,而WEB3更是将未来世界在系统层面上做了完整假设。理想很丰满,现实很骨感,我们依然要前行,我们更想知道曲折之路将会如何达成.

1900/1/1 0:00:00
HashKey:详解欧盟委员会稳定币监管提案方向与意义

欧盟委员会的监管方向是鼓励稳定币作为交易工具使用,而非用于价值存储。原文标题:《对欧盟委员会稳定币监管提案的分析》撰文:崔晨,就职于HashKeyCapitalResearch审核:邹传伟,万向区块链与PlatON首席经济学家欧盟委员.

1900/1/1 0:00:00
关于暂停IP5G/USDT交易公告

公告编号2020121901各位关心ZBG的投资者们和项目方:为了保障交易的稳定运行和提升用户体验,ZBG将于HKT2020年12月19日19:00暂停IP5G/USDT交易;IP5G/QC交易对不受影响.

1900/1/1 0:00:00