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
V神撰文介绍隐形地址概念以解决以太坊隐私保护难题:1月23日消息,以太坊联合创始人 Vitalik Buterin 近日发布新文章《隐形地址的不完整指南》,指出以太坊生态系统后续的最大挑战之一就是隐私,并提出隐形地址概念作为可能的隐私解决方案。该方案可能会使 P2P 交易、NFT 转移和 ENS 注册实现匿名化,从而起到用户保护作用。Vitalik Buterin 提出接收资产的用户可以生成并保存一个支出密钥,用于生成一个可以在 ENS 上注册的隐形元地址。该地址可以传递给交易发送者,发送者对元地址执行加密计算以生成一个属于接收者的隐形地址。发送方可以将资产转移到接收方的隐形地址,此外还可以发布临时密钥以确认隐形地址属于接收方,每个新交易都会生成一个新的隐形地址。
Vitalik Buterin指出除了实施密钥盲化机制之外,还需要采用Diffie-Hellman 密钥协议算法,以确保隐形地址和用户元地址之间的链接不会公开,并利用 ZK-SNARKs 技术转移资金支付 Gas 费。[2023/1/23 11:26:48]
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下载文件和文件夹
Wormhole攻击者抛售SOL,并将约290万枚USDC桥接至以太坊新地址:1月15日消息,链上数据显示,跨链协议Wormhole攻击者(5XiqTJQBTZKcGjcbCydZvf9NzhE2R3g7GDx1yKHxs8jd)将所持有的价值约260万美元SOL出售为USDC,目前该地址仍剩余192,651枚SOL。据慢雾监测显示,黑客随后将约290万枚USDC桥接至以太坊新地址,初始Gas费来自于先前标记的钱包地址((WormholeNetworkExploiter)。
此前报道,2022年2月3日,跨链协议Wormhole遭黑客攻击,本次攻击事件中损失达12万枚ETH(约合3.26亿美元),目前8万枚ETH已转移至以太坊网络,其余4万枚ETH保留在Solana上。[2023/1/15 11:13:18]
web3-net有什么作用?
web3-net模块的作用是使你可以与以太坊节点的网络属性进行交互。通过web3-net,你可以采用你需要获得的信息所关联的协议后加.net来查找该节点的相关信息。下面显示了两个说明性示例:
web3.*.net.getID返回网络ID
web3.*.net.getPeerCount返回连接到节点的对等点数
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
以太坊牧猫人项目管理人员:伴随对冰河期进行修复,希望没有EIP-1559的矿工将无法进行简单的链分叉:3月6日消息,以太坊牧猫人项目管理人员、以太坊生态系统贡献者Edson Ayllon表示,EIP-1559将在以太坊伦敦网络升级中启动,同时将对即将到来的冰河期(Ice Age)进行修复。希望没有EIP-1559的矿工将无法进行简单的链分叉,但需要在冰河期(Ice Age)取消后分配新客户端。
此前2月11日消息,随着以太坊逐渐进入冰河期(Ice age)使得挖矿难度不断加大,每日新挖出的以太坊总量已经从20000个减少到了13000个,下降了近一半,降至历史最低点。
据悉,以太坊的冰河期(Ice Age)是以太坊的PoW机制对难度(difficulty)的调整策略。以太坊里PoW对难度的调整将根据区块高度不断增加,而这个增加是指数级的,算力发展的速度将远跟不上难度增加的速度。以太坊是不能进入冰河期的,进入冰河期意味着以太坊将失去功能。以太坊设置冰河期是为了表明其要转向PoS的态度和决心。[2021/3/7 18:22:48]
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_的组织方式截然不同,因此尽管两个库的功能非常相似,但模块间并非总是能清晰对应。
ethers.contract有什么作用?
Ethers.contract的作用是部署智能合约并与它交互。具体来说,该模块中的函数用于侦听从智能合约发射的事件、调用智能合约提供的函数、获取有关智能合约的信息,以及部署智能合约。下面显示了两个说明性示例:
_ethers.ContractFactory.fromSolidity_从Solidity编译器的编译器输出或从Truffle生成的JSON文件创建一个用于部署智能合约的“工厂”。_ethers.Contract_使你可以与已部署的智能合约进行交互。ethers.utils有什么作用?
当前以太坊Gas Price达到400 Gwei:ETH Gas Station数据显示,当前以太坊Gas Price达到400 Gwei左右。[2021/2/23 17:43:33]
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版本。有许多教程没有更新,不要想当然地认为你可以使用最新版本的库,除非教程中具体说明。
如果你要从零开始构建应用并确定需要使用的库,我们有一个使用评估流程,下面列出了9个问题。在确定哪个库适合你时应该思考这些问题。此外还提供了一些上下文和信息以帮助你回答这些问题。
库的受欢迎程度有多重要?“在Github上受欢迎的项目正如你所料。也就是说,有许多人提问、参与和支持。这些活动能让软件更加可靠。通过查看任何一个项目的加星数、已发布的问题数量、处理中的拉取请求以及项目的参与者数量,可以确定它的受欢迎程度。”
以太坊未确认交易为103,185笔:金色财经消息,据OKLink数据显示,以太坊未确认交易103,185笔,当前全网算力为275.47TH/s,全网难度为3.65P,当前持币地址为52,007,764个,同比增加107,531个,24h链上交易量为1,571,189.14ETH,当前平均出块时间为13s。[2020/12/26 16:36:12]
截止到撰写本博客时,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它测试套件至今似乎还未更新。
库的下载量有多重要?由于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意味着什么?
Overview概述到目前为止,我没有看到一篇令人满意的DeFi的技术和业务的研究报告,决定将本内部研究报告分享给大家。本报告以技术分析为基础描述uniswap业务机制和背后的金融原理.
1900/1/1 0:00:00据CipherTrace称,DeFi蓬勃发展的生态系统今年受到一系列黑客的困扰,这些黑客占所有加密黑客数量的21%.
1900/1/1 0:00:00本公众号由币比网(bibiwang.com)战略支持,文章在币比网和我的公众号同步发布。本文不构成任何投资建议,投资有风险,入市需谨慎!上文说到以太坊帝国正逐渐没落,BTC也不能独善其身,那么谁.
1900/1/1 0:00:00GlobalCoinResearch每周发布两次亚洲区块链市场新闻Newsletter,该公司是一家专注于亚洲区块链市场及技术的投研公司.
1900/1/1 0:00:00?交易系统几个核心内涵1、心态核心在交易系统没有出现可交易时机时,心态如何摆正,并且做到行与心合一,是保证交易系统能够发挥作用的首要条件.
1900/1/1 0:00:00Coda团队密码学实力较强,亦获得Coinbase等众多知名机构的投资,目前缺乏优质的生态项目.
1900/1/1 0:00:00