6月份的ethers.js亮点更新

本季度最大的新闻,就是在BN.js库中发现了一个关键的字符串序列化漏洞,由Alex Dupre发现,他也提供了必要的补丁。

关键的BigNumber修复

本季度最大的新闻,就是在BN.js库中发现了一个关键的字符串序列化漏洞,由Alex Dupre发现,他也提供了必要的补丁。

v5的ethers库使用BN.js,其理由是以太坊操作需要一个VLI库,同时也是因为JavaScript只提供IEEE 754浮点数。椭圆需要BN.js,ethers使用的是椭圆曲线密码术(ECC)库,所以对secp256k1和BigNumber重复使用意味着我们只需要一个VLI库。

此外,由于ether中的所有对象都是不可变的,所以BigNumber对象将所有值存储为十六进制字符串,其原因就是因为它们是快速而简单的不可变对象,同时又可以高效地转换回数学中的大数字。

然而,幸运的是,该错误只会在非常大的值上表现出来,远远超出了大多数以太坊用途的范围。以太坊中的所有值都是256位,当值超过337位时,这个bug才成为问题。

当然,在极少数情况下,这也仍然会产生问题,因为256位的数字乘以另一个256位的数字会得到512位的数字,这可能会受到影响,或者如果将大量的值相加(例如,在计算平均值时),分子的大小可能会超过337位。

但是,EVM的大多数值都不接近256位。例如,1ether (10 ^ 18 wei)只是一个60位的值(EVM中前196位为0)。

尽管这个bug不太可能成为一个问题,但仍然强烈建议每个人都更新到最新版本。

现在,原生VLI在大多数JavaScript环境中都是一个可行的方案,以及使用它们的现代ECC库,v6使用了Paul Miller的noble库,这些库都非常棒,快速,并已被充分审计。

其他一些更新

这只是对v5版本中添加的一些更新的快速总结。

  • WebWorker ESM 支持
  • Skynet 和 IPNS Content Hash支持
  • 默认的L2支持:Matic, Optimism,等等
  • Hardhat的兼容性
  • 遗留环境的子类支持
  • 将Ankr加入到默认后端家族中

当前的v5文档将大多数ether函数和类链接到相关的TypeScript源代码上,但仍然需要在源代码和文档之间来回切换,而且有很多地方的文档要么不同步,要么就在源代码或文档中才进行了完整描述。

通过向Flatworm添加JSDoc提取,现在文档将保持同步,并为所有功能提供文档。在构建时,如果有未归档的操作或缺少导出的话,就会发出警告。

Source:https://medium.com/ricmoo/highlights-ethers-js-june-2022-f5328932e35d

关于

ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

本文首发于:https://mp.weixin.qq.com/s/ptgewhfgj5tTSbJbfvUmmg

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ChinaDeFi 去中心化金融社区
ChinaDeFi 去中心化金融社区
ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。